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 >
Wrap
Text File
|
1993-11-10
|
7KB
|
172 lines
Zwei virtuelle Programmierer über XLib_TP.
A:Moin
B:Moin-moin.
A: Hallo. Ich habe soeben diesen ZIP-File von XLib bekommen, wundere
mich aber, warum ich eine weitere Grafikbibliothek nutzen sollte, wenn
ich schon die graph-unit habe ?
B: Gegenfrage, hast du schon ohne Probleme mit der Graph-Unit 256 Farben
nutzen bzw. richtige Sprites zeichnen können ?
A: Ok, ok, ich wollte ja Spiele programmieren. Aber man könnte doch den
BGI_256 nutzen und eine schnelle Sprite-Routine machen.
B: Leider hast du dann immer noch nicht Effekte wie Softscrolling - da
du nur eine Grafikseite hast.
A: Moment ! Was nutzt den dann diese XLib_TP für einen Grafikmodus, denn
der normale Modus hat nur eine Grafikseite. Und läuft der dann auch auf
meiner XY-Ungelöst-VGA-Karte ?
B: Klar. Aber jetzt im Klartext : XLib_TP nutzt den Mode X (Modebezeichnung).
Dieser setzt sich aus dem normalen Mode 320x200x256 (ab jetzt Mode 13h),
einer Änderung des Adressierungsmodi's und weiterer hardwarenahen
Eigentümlichkeiten der Standart-VGA-Karte (!) zusammen. Diese erlauben
es 4*2^16 = 2^18 = 640*400 Pixel darzustellen. Leider ist diese Auflösung
nicht auf einer Standart-VGA-Karte möglich, aber viruell ist es möglich.
A: Was heißt virtuell ?
B: Für dein Programm ist der vir. Bildschirm der komplette Bildschirm, aber
als Spieler siehst du nur einen Ausschnitt. Also ein Fenster in ein
größeres Bild.
A: Und warum sind diese Auflösungen nicht möglich. Ich hab da ein Windows-
treiber ...
B: Wir sprechen hier immer noch über Möglichkeiten JEDER VGA-Karte. Die
eigentliche Auflösung, also Pixel auf sichtbaren Bildschirm, kann man
aus mehreren Möglichkeiten auswaehlen (z.B.:320x200, 360x240, 320x480,
360x200, usw.).
A: Und wie kann ich diesen Mode jetzt nutzen ?
B: Du gibst jetzt nur noch Breite des vir. Bildschirms an und schon hast
du den ersten Prozedure-Aufruf :
x_set_mode(Modus:Byte; Breite:Word);
Die genauen Modinummern stehen in der Datei X_Main.pas. Um jetzt deine
virtuelle Bildschirmhöhe zu berechnen, mußt du noch folgendes wissen :
X-Auflösungen sind immer durch 4 teilbar: MaxX:=Breite and not 3;
Deine Y-Auflösung ist eben der in Pixelzeilen aufgeteilte 2^18-Pixel-
bereich: MaxY:=262144 div MaxX;
A: Also wie init_graph , aber ohne BGI-Treiber zu laden ?
B: Stimmt genau. Da der Mode X einmal durchprogrammiert wurde, gibt es
keine mitzuschleifenden Grafiktreiber.
A: Und wie jetzt weiter ? Wie kann ich jetzt ein Punkt zeichnen ?
B: Da wurden die Namen aus der Graph-Unit übernommen. Es gibt die Prozeduren
PutPixel, GetPixel, Line, LineTo, MoveTo, Rectangle. Weiterhin gibt es
noch ClearScreen, X_Circle und X_Filled_Circle. Also alles selbsterlärende
Namen. Und für erstere kann man sogar die Turbo-Pascal-Hilfe nutzen.
A: Und wo sind die alle ?
B: Jetzt, wo du es ansprichst, kann ich es ja sagen. Alle Prozeduren, die
ich bis jetzt erwähnte, sind in der Unit X_Main definiert. Wichtige
Variablen wie GetMaxX und GetMaxY sind in der Unit X_Const.
A: Fein, aber jetzt will ich endlich meine Sprites auf dem Bildschirm sehen.
B: Gut, die Prozeduren sind alle samt in der Unit X_Bitmap und ab jetzt
werden wir die Sprites als Bitmap's bezeichnen.
Zuerst zeichnest du dir ein Bitmap und speicherst es als PBM. Das geht
mit BEX ganz einfach, da du auch Gif-Bilder reinladen kannst.
Hier ein einfaches Beispiel :
var Bitmap : Array[1..1000] of Byte; (* Deklaration *)
begin;
x_set_mode(0,400); (* Mode X setzen *)
x_load_pbm('Odie.pbm',Bitmap); (* Laden *)
x_put_pbm(10,10,Bitmap); (* Bitmap zeigen *)
Eleganter : (Kenntnisse mit Pointern vorrausgesetzt) :
var BitMap : Pointer;
begin;
x_set_mode(0,400); (* Mode X setzen *)
GetMem(BitMap,F_Size('Odie.pbm')); (* F_Size aus X_FileIO-Unit *)
x_load_pbm('Odie.pbm',BitMap^);
x_put_pbm(10,10,BitMap^);
Aber im Programm Bitmap_D sind auch noch andere Formate vertreten,
die teils beträchlich schneller sind. Aber wie du siehst, ist es ganz
einfach.
A: Brauche ich dann eigentlich die anderen Formate ?
B: Jein. Am Anfang kannst du es natürlich dabei belassen. Ich wollte aber
gleich erst einmal zeigen, das das die langsamste der drei Varianten ist.
A: Sind dann meine Bitmaps schon durchscheinend - also mit transparenten Pixel ?
B: Nein. x_put_pbm "kopiert" dein Bitmap direkt auf den Bildschirm. Mit
x_put_masked_pbm bleiben die Hintergrundpixel unverändert, wenn das Pixel
in deinem Bitmap den Wert 0 hat (meinst schwarz).
A: Hier gibt es ja noch andre "Put"-Prozeduren .
B: Ja, es gibt die Clip-Technik. Damit kann man den Bildschirm für Bitmaps
beschränken (Bitmaps abschneiden-clippen).
x_set_clip_rect(left,top,right,bottom:Word); kannst du dieses "Fenster"
einstellen. Der Name für die Sprite-Prozedure wird aber dadurch länger.
Um z.B.: links und rechts einen festen Rand zu machen :
x_set_clip_rect(50,0,GetMaxX-50,GetMaxY);
und "put" : x_put_pbm_clipx bzw. x_put_masked_pbm_clipx
Analog für festen Rand oben,unten (clipy).
Für ein echtes Fenster:
x_set_clip_rect(10,10,GetMaxX-10,GetMaxY-10);
und "put" : x_put_pbm_clipxy bzw. x_put_masked_pbm_clipxy.
A: Damit kann ich mir ja auch eine SCORE-Leiste machen und brauch nicht
auf meine Bitmaps aufpassen ?
B: Da hätte ich noch eine bessere Idee. Es gibt den Splitscreen. Das ist
eine Funktion der VGA-Karte, ab einer einstellbaren Bildschirmzeile
ein "zweites" Fenster einzublenden. Wirklich siehst du dann den Anfang
von deinem virtuellen Bildschirm.
╔═══════════════╗ ┌───────────────────┐
║ ║ <- Bildschirm │ Splitscreen | │
║ ║ │---------------┘ │
║ Gamescreem ║ │ │
║ ║ │ │
║ Virtueller║ │ │
║ ║ │ │
║ Bildschirm║ Bildspeicher -> │ Virtueller │
║ ║ │ │
║---------------║ │ │
║ Splitscreen ║ │ Bildschirm │
╚═══════════════╝ │ │
│ │
Den größeren virt. Bildschirm kannst │ │
du natürlich scrollen und ver- │ │
schieben. Du musst eben aufpassen, │ │
das nicht der obere Teil des virt. │ │
Screens im Gamescreen erscheint. └───────────────────┘
Jetzt schreibst du deine Scores ab der Pos. (0,0), waehernd der Sprites
weiterhin unbehelligt über den virt. Bilschirm flitzen können.
A: OK, also - jetzt muß ich aber sofort anfangen, aus den einfachen
Demo's endlich ein bischen die Grafikpower rauszukitzeln.
B: Mach nur.