home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_PAS / XLIB_TP5.ZIP / DOC / XLIB_WA.RUM < prev    next >
Text File  |  1993-11-10  |  7KB  |  172 lines

  1. Zwei virtuelle Programmierer über XLib_TP.
  2.  
  3. A:Moin
  4. B:Moin-moin.
  5.  
  6. A: Hallo. Ich habe soeben diesen ZIP-File von XLib bekommen, wundere
  7.    mich aber, warum ich eine weitere Grafikbibliothek nutzen sollte, wenn
  8.    ich schon die graph-unit habe ?
  9.  
  10. B: Gegenfrage, hast du schon ohne Probleme mit der Graph-Unit 256 Farben
  11.    nutzen bzw. richtige Sprites zeichnen können ?
  12.  
  13. A: Ok, ok, ich wollte ja Spiele programmieren. Aber man könnte doch den
  14.    BGI_256 nutzen und eine schnelle Sprite-Routine machen.
  15.  
  16. B: Leider hast du dann immer noch nicht Effekte wie Softscrolling - da
  17.    du nur eine Grafikseite hast.
  18.  
  19. A: Moment ! Was nutzt den dann diese XLib_TP für einen Grafikmodus, denn
  20.    der normale Modus hat nur eine Grafikseite. Und läuft der dann auch auf 
  21.    meiner XY-Ungelöst-VGA-Karte ?
  22.  
  23. B: Klar. Aber jetzt im Klartext : XLib_TP nutzt den Mode X (Modebezeichnung). 
  24.    Dieser setzt sich aus dem normalen Mode 320x200x256 (ab jetzt Mode 13h),
  25.    einer Änderung des Adressierungsmodi's und weiterer hardwarenahen
  26.    Eigentümlichkeiten der Standart-VGA-Karte (!) zusammen. Diese erlauben
  27.    es 4*2^16 = 2^18 = 640*400 Pixel darzustellen. Leider ist diese Auflösung
  28.    nicht auf einer Standart-VGA-Karte möglich, aber viruell ist es möglich.
  29.  
  30. A: Was heißt virtuell ?
  31.  
  32. B: Für dein Programm ist der vir. Bildschirm der komplette Bildschirm, aber
  33.    als Spieler siehst du nur einen Ausschnitt. Also ein Fenster in ein 
  34.    größeres Bild.
  35.  
  36. A: Und warum sind diese Auflösungen nicht möglich. Ich hab da ein Windows-
  37.    treiber ...
  38.  
  39. B: Wir sprechen hier immer noch über Möglichkeiten JEDER VGA-Karte. Die
  40.    eigentliche Auflösung, also Pixel auf sichtbaren Bildschirm, kann man
  41.    aus mehreren Möglichkeiten auswaehlen (z.B.:320x200, 360x240, 320x480, 
  42.    360x200, usw.). 
  43.    
  44. A: Und wie kann ich diesen Mode jetzt nutzen ?
  45.    
  46. B: Du gibst jetzt nur noch Breite des vir. Bildschirms an und schon hast 
  47.    du den ersten Prozedure-Aufruf : 
  48.       x_set_mode(Modus:Byte; Breite:Word);
  49.    Die genauen Modinummern stehen in der Datei X_Main.pas. Um jetzt deine
  50.    virtuelle Bildschirmhöhe zu berechnen, mußt du noch folgendes wissen :
  51.    X-Auflösungen sind immer durch 4 teilbar: MaxX:=Breite and not 3;
  52.    Deine Y-Auflösung ist eben der in Pixelzeilen aufgeteilte 2^18-Pixel-
  53.    bereich: MaxY:=262144 div MaxX;
  54.  
  55. A: Also wie init_graph , aber ohne BGI-Treiber zu laden ?   
  56.  
  57. B: Stimmt genau. Da der Mode X einmal durchprogrammiert wurde, gibt es
  58.    keine mitzuschleifenden Grafiktreiber.
  59.  
  60. A: Und wie jetzt weiter ? Wie kann ich jetzt ein Punkt zeichnen ?
  61.  
  62. B: Da wurden die Namen aus der Graph-Unit übernommen. Es gibt die Prozeduren
  63.    PutPixel, GetPixel, Line, LineTo, MoveTo, Rectangle. Weiterhin gibt es
  64.    noch ClearScreen, X_Circle und X_Filled_Circle. Also alles selbsterlärende
  65.    Namen. Und für erstere kann man sogar die Turbo-Pascal-Hilfe nutzen.
  66.  
  67. A: Und wo sind die alle ?
  68.  
  69. B: Jetzt, wo du es ansprichst, kann ich es ja sagen. Alle Prozeduren, die
  70.    ich bis jetzt erwähnte, sind in der Unit X_Main definiert. Wichtige
  71.    Variablen wie GetMaxX und GetMaxY sind in der Unit X_Const.
  72.  
  73. A: Fein, aber jetzt will ich endlich meine Sprites auf dem Bildschirm sehen.
  74.  
  75. B: Gut, die Prozeduren sind alle samt in der Unit X_Bitmap und ab jetzt
  76.    werden wir die Sprites als Bitmap's bezeichnen. 
  77.    
  78.    Zuerst zeichnest du dir ein Bitmap und speicherst es als PBM. Das geht
  79.    mit BEX ganz einfach, da du auch Gif-Bilder reinladen kannst.
  80.    Hier ein einfaches Beispiel :
  81.       var Bitmap : Array[1..1000] of Byte;  (* Deklaration   *)
  82.       begin;
  83.         x_set_mode(0,400);                  (* Mode X setzen *)
  84.         x_load_pbm('Odie.pbm',Bitmap);      (* Laden         *)
  85.         x_put_pbm(10,10,Bitmap);            (* Bitmap zeigen *)
  86.    
  87.    Eleganter : (Kenntnisse mit Pointern vorrausgesetzt) :
  88.       var BitMap : Pointer;
  89.       begin;
  90.         x_set_mode(0,400);                  (* Mode X setzen *)
  91.         GetMem(BitMap,F_Size('Odie.pbm'));  (* F_Size aus X_FileIO-Unit *)
  92.         x_load_pbm('Odie.pbm',BitMap^);
  93.         x_put_pbm(10,10,BitMap^);
  94.    
  95.    Aber im Programm Bitmap_D sind auch noch andere Formate vertreten,
  96.    die teils beträchlich schneller sind. Aber wie du siehst, ist es ganz
  97.    einfach.
  98.  
  99. A: Brauche ich dann eigentlich die anderen Formate ?
  100.  
  101. B: Jein. Am Anfang kannst du es natürlich dabei belassen. Ich wollte aber
  102.    gleich erst einmal zeigen, das das die langsamste der drei Varianten ist.
  103.    
  104. A: Sind dann meine Bitmaps schon durchscheinend - also mit transparenten Pixel ?
  105.  
  106. B: Nein. x_put_pbm "kopiert" dein Bitmap direkt auf den Bildschirm. Mit
  107.    x_put_masked_pbm bleiben die Hintergrundpixel unverändert, wenn das Pixel 
  108.    in deinem Bitmap den Wert 0 hat (meinst schwarz).
  109.  
  110. A: Hier gibt es ja noch andre "Put"-Prozeduren .
  111.  
  112. B: Ja, es gibt die Clip-Technik. Damit kann man den Bildschirm für Bitmaps
  113.    beschränken (Bitmaps abschneiden-clippen).
  114.    x_set_clip_rect(left,top,right,bottom:Word); kannst du dieses "Fenster"
  115.    einstellen. Der Name für die Sprite-Prozedure wird aber dadurch länger.
  116.  
  117.    Um z.B.: links und rechts einen festen Rand zu machen :
  118.      x_set_clip_rect(50,0,GetMaxX-50,GetMaxY);
  119.    und "put" : x_put_pbm_clipx  bzw. x_put_masked_pbm_clipx
  120.  
  121.    Analog für festen Rand oben,unten (clipy).
  122.  
  123.    Für ein echtes Fenster:
  124.      x_set_clip_rect(10,10,GetMaxX-10,GetMaxY-10);
  125.    und "put" : x_put_pbm_clipxy bzw. x_put_masked_pbm_clipxy.
  126.  
  127. A: Damit kann ich mir ja auch eine SCORE-Leiste machen und brauch nicht
  128.    auf meine Bitmaps aufpassen ?
  129.  
  130. B: Da hätte ich noch eine bessere Idee. Es gibt den Splitscreen. Das ist
  131.    eine Funktion der VGA-Karte, ab einer einstellbaren Bildschirmzeile
  132.    ein "zweites" Fenster einzublenden. Wirklich siehst du dann den Anfang
  133.    von deinem virtuellen Bildschirm.
  134.  
  135.     ╔═══════════════╗                   ┌───────────────────┐
  136.     ║               ║ <- Bildschirm     │  Splitscreen  |   │
  137.     ║               ║                   │---------------┘   │
  138.     ║ Gamescreem    ║                   │                   │
  139.     ║               ║                   │                   │
  140.     ║     Virtueller║                   │                   │
  141.     ║               ║                   │                   │
  142.     ║     Bildschirm║   Bildspeicher -> │     Virtueller    │
  143.     ║               ║                   │                   │
  144.     ║---------------║                   │                   │
  145.     ║  Splitscreen  ║                   │     Bildschirm    │
  146.     ╚═══════════════╝                   │                   │
  147.                                         │                   │
  148.    Den größeren virt. Bildschirm kannst │                   │
  149.    du  natürlich  scrollen  und  ver-   │                   │
  150.    schieben. Du musst eben  aufpassen,  │                   │
  151.    das nicht  der obere Teil des virt.  │                   │
  152.    Screens im Gamescreen erscheint.     └───────────────────┘
  153.  
  154.    Jetzt schreibst du deine Scores ab der Pos. (0,0), waehernd der Sprites
  155.    weiterhin unbehelligt über den virt. Bilschirm flitzen können.
  156.  
  157. A: OK, also - jetzt muß ich aber sofort anfangen, aus den einfachen
  158.    Demo's endlich ein bischen die Grafikpower rauszukitzeln.
  159.  
  160. B: Mach nur.
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.