GLBasic Benutzerhandbuch

Main sections

04 Grafik(2D)

Allgemeines:



GLBasic benutzt 2 (Eigentlich 3) Bildschirmseiten. Sehen wir uns diese einmal genau an.

1. Primary Surface - Der Primärbildschirm.
Das ist, was der Nutzer am Bildschirm sieht.

2. Back Buffer - Der hintere Puffer.
Das ist, worauf alle Grafikbefehle von GLBasic schreiben. Er ist für niemanden sichtbar. Erst wenn der Befehl: 'SHOWSCREEN' aufgerufen wird, ist der Back Buffer die neue Primary Surface. Später dazu im Detail. Vergisst Du einmal den Befehl 'SHOWSCREEN', erlebst Du Black-Screen-Entertainment, kurz Du siehst gar nichts.

3. Offscreen Surface - Der Hintergrundpuffer.
Dieser Bildschirm kann nur durch 3 Befehle angesprochen werden. 'LOADBMP', 'BLACKSCREEN' und 'USEASBMP'.
LOADBMP lädt ein BMP-Bild auf diesen unsichtbaren Puffer. USEASBMP kopiert den aktuellen BackBuffer mit allen gezeichneten Sprites auf das Offscreen Surface.
BLACKSCREEN löscht, bzw. macht das Offscreen Surface schwarz.

Wird der Befehl SHOWSCREEN aufgerufen, so tauschen Primary Surface und Back Buffer ihre Plätze. Da der Back Buffer nun unbrauchbar ist, da er den vor-vorherigen Bildschirminhalt aufweist, wird das Offscreen Surface auf ihn kopiert. Ist kein Bild geladen, wir der BackBuffer schwarz.

Ein Programm ist daher meist so aufgebaut:
// Mein Programm 
start:
LOADBMP "Hintergrund.bmp"
// Weitere Grafiken laden als Sprites...
// Level laden, Datensetup (Leben=3, Zeit=100...)
maingame:
// Tastaturabfrage
// Spieler bewegen & Zeichnen
// Gegner bewegen & Zeichnen
SHOWSCREEN
GOTO maingame


Sprites



Was ist ein Sprite? Ein Sprite ist normalerweise ein kleines Grafikobjekt das sich bewegt. Pacman und die Geister sind z.B. Sprites, und das Labyrinth ist Hintergrund.

Das sind die Pacman Sprites...


Wenn Du Ahnung von Computern hast, kennst Du vielleicht die Warheit: Der PC kann keine Sprites. Die gute Nachricht: GLBasic tut so, als gäbe es sie. Mit allem Komfort. Zunächst aber, was um alles in der Welt ist so ein 'Sprite'? Nein. Kein Erfrischungsgetränk. Sprites sind kleine Bildteilchen, die von Haus aus tolle Effekte beherrschen, die man mit normalen Grafikblöcken erst mühselig progammieren müsste.
ZSprites haben ein sog. CookieCut (dt.: Plätzchenform). Das heisst, wenn es vor einer Mauer steht, ist der Bereich knapp neben dem Sprite transparent. (Man sieht die Mauer). Ohne CookieCut (aus Grafikblöcken) hätte jede Figur ein schwarzes, viereckiges Rechteck um sich herum.

Etwa so...
+ =

Nun, woher weiß aber jetzt GLBasic, welche Stelle eines Bildes, das als Sprite geladen wird, transparent sein soll? Es gäbe tausend Möglichkeiten. GLBasic benutzt folgende:
ALLE PIXEL DER FARBE rot:255, grün:0, blau:128 (Hex: FF 00 80), also ein ätzendes Pink, werden als transparent behandelt.

So etwa...
+ =

ACHTUNG:

Alle Grafiken, die Du in GLBasic lädst, haben das Windows-Bitmap Format, unkomprimiert, mit 8 oder 24Bit Farbtiefe. Du kannst keine 16Farb-Grafiken laden. Diese müsstest Du zuerst mit MSPaint laden und unter 8Bit Farbtiefe speichern.
PNG Dateien können auch geladen werden. Debei wird entweder RGB(255,0,128) als Transparent oder der Alpha-Kanal falls vorhanden.

Dein erstes Sprite:
//////////////// 
// SPRITES
////////////////
// DRAWSPRITE aus BMP Datei laden und Nummer 0 zuweisen
LOADSPRITE "Bubble.bmp" ,0
// DRAWSPRITE Nummer 0 anzeigen an Stelle x=300, y=150;
DRAWSPRITE 0, 300, 150
SHOWSCREEN
END


Wie Du siehst, mit nur 3 Befehlen hat man ein sichtbares Ergebnis. Das Programm, dass ausgeführt wird, um diese paar Zeilen zu ermöglichen ist mehrere Bildschirmseiten lang. Und genau darin liegt Dein Vorteil gegenüber Programmierern von Hochsprachen (C++, Assembler, Pascal...)
Der Befehl LOADSPRITE erklärt sich selbst. Er lädt eine BMP Datei, die dann als Sprite Grafik benutzt werden kann. Um ein Sprite ansprechen zu können, geben wir ihm eine Nummer (Hier: 0) Siehe auch: Befehl GENSPRITE().
Sieh' Dir ruhig mal die BMP Datei an. Du wirst feststellen, dass um die Blase herum ein ätzendes Pink ist -> Transparente Farbe.


Um das Ganze besser zu sehen, laden wir jetzt ein Bild. bevor wir das Sprite anzeigen. Dazu fügen wir folgenede am Anfang des Programmes ein:
LOADBMP "back.bmp"


Der Befehl 'DRAWSPRITE' hat 3 Parameter. Der Erste ist die Nummer des Sprites. 2 und 3 sind die x und y Position der linken oberen Ecke des Sprites. Wie stark das Sprite mit anderen Grafiken vermischt wird, wird im Befehl ALPHAMODE angegenben. Richtig GLBasic unterstützt Alpha-Blending! Noch nie gehört? Kein Problem.

AlphaBlending ist, wenn man zwei Bilder, z.B. Hintergrund und Sprite, miteinander verschmilzt. Dabei unterstützt GLBasic 2 Möglichkeiten.

ADDITIVES ALPHABLENDING



ein Wert zwischen 0..00001 und 1.0 mischt beide Farbwerte, in dem es die Rot, Grün und Blau-Werte jedes einzelnen Pixels einfach zusammenzählt und aufpasst, dass diese nicht über 255 (FF) kommen. Klingt kompliziert, wird aber alles von GLBasic übernommen. Ein Wert über +1 ist gut für Effekte wie Feuer, Explosionen, Glasscheiben..

INTERPOLIERTES ALPHABLENDING



ein Wert zwischen -0.00001 und -1.0 verschmilzt beide Objekte, indem die Rot, Grün und Blau-Werte zusammengezählt und durch 2 geteilt werden. Effekt? Man kann durch dunkle Formen sehr leicht Schatten erzeigen.

Ein Tip: Nimm Dir ein Stündchen Zeit, zeichne ein paar Formen in verschiedenen Farben und probiere AlphaBlending auf einem bunten Bild aus. (Auch mit Schwarz-Weiß Bildern lassen sich durch AlphaBlending mit bunten Sprites tolle Effekte erzielen).

DRAWSPRITE SPEZIALEFFEKTE



Ein Sprite auf eine beliebige Größe zoomen kannst Du mit:
ZOOMSPRITE id, xstart, ystart, x%, y%

oder:
STRETCHSPRITE id, xstart, ystart, xbreite, ybreite

Du drehst ein Sprite um seinen Mittelpukt mit:
ROTOSPRITE id, x, y, winkel

Dabei sind x und y die Koordinaten des Sprites, wenn es nicht gedreht wird. Also ist der Befehl:
ROTOSPRITE 1,50,70, 0

identisch mit:
DRAWSPRITE 1,50,70

Beides kombiniert gibt:
ROTOZOOMSPRITE id, x, y, winkel, groesse


groesse gibt die Größe des Sprites bezogen auf die Originalgröße in Prozent an. 0.50 ist also halb so groß wie das Original, 2.0 das Doppelte.

GRAFIK SONDERFUNKTIONEN



Ein besonderes Schmankerl bietet GLBasic zum Überblenden von Bildern. Mit dieser Funktion kannst Du den Inhalt des BackBuffers in ein BMP-Bild überblenden. Ist das Bild schwarz, wird der BackBuffer-Inhalt sanft ausgeblendet (fading), also immer dunkler bis alles schwarz ist.
BLENDSCREEN bmpdatei$

Und es kommt noch besser: GLBasic kann alle verfügbaren Videoformate wiedergeben. (Also alles, was sich im Windows MediaPlayer(2) abspielen lässt.)
Zum Beispiel .avi, .mpg... Dateien. Alles supereinfach mit:
PLAYMOVIE filename$



EINFACHE ZEICHNUGEN



Manchmal ist es praktischer eine Linie zu zeichnen statt ein Sprite zu gebrauchen. Daher hat GLBasic auch Zeichenbefehle für Linien, ausgefüllte Rechtecke und einzelne Punkte.

Siehe dazu:
SETPIXEL - DRAWLINE - DRAWRECT

See also...