GLB:Intro und Menü
Aus PandoraWiki
In diesem Teil des Tutorials erstellen wir nun ausführbaren Code, sowie ein Spielmenü und ein Intro. Dafür werden folgende Ordner und Dateien benötigt:
[isdo] -> dieser Ordner beinhaltet die Daten welches unser ausf?hrbares Programm ben?tigen wird
[gfx] -> hier befinden sich die ben?tigten Grafikdateien
intro.png -> Grafik f?r das Intro
menu.png -> Grafik f?r das Startmen?
2D Shooter Tutorial Part 2.gbap -> unsere GLBasic Projektdatei
isdo.gbas -> Programmmodul mit der Hauptschleife
intro.gbas -> Programmmodul mit dem Code f?r den sichtbaren Programmstart
menu.gbas -> Programmmodul mit dem Code f?r ein kleines Startmen?
Die Dateien befindet sich wie immer im Pandora-Datei-Archiv: http://dl.openhandhelds.org/cgi-bin/pandora.cgi?4,0,0,0,46,27
Als erstes kommentieren wir folgende Zeile im Mainloop (isdo.gbas) aus, da wir diese erst etwas später benötigen werden.
//CASE AS_LEVEL00 ; AppState=RunLevel00()
Anschliessend schauen wir uns mal die Datei intro.gbas etwas genauer an.
//----------------------------------------------------------------------------- // I N I T I N T R O //----------------------------------------------------------------------------- LOADBMP "./isdo/gfx/intro.png"
Hier wird die Grafik für unser kleines Intro in den Hintergrundbuffer geladen, damit wir anschliessend die verschiedenen Sprites heraus "grabben" können. Dies sieht dann so aus:
GRABSPRITE 1,0,0,306,52 GRABSPRITE 2,0,52,75,21 GRABSPRITE 3,75,52,18,17 GRABSPRITE 4,112,52,193,32
Wenn Ihr die Grafik oben in intro.png ändert, könnt Ihr z.B. euer eigenes Logo erscheinen lassen.
Nun lassen wir die einzelnen Grafikteile erscheinen.
// mountainsoft FOR i=-0.01 TO -1 STEP -0.02 ALPHAMODE 0 DRAWRECT 0,0,320,240,RGB(255,255,255) ALPHAMODE i DRAWSPRITE 1,7,94 SHOWSCREEN NEXT
In der FOR..NEXT-Schleife bestimmen wir in der Variablen i wie die Grafik eingeblendet wird. Das DRAWRECT ist nötig damit die Grafik nicht sich selbst überblendet. Nachdem die Grafik voll eingeblendet ist; let's have a break.
SLEEP 3000
Danach blenden wir die Grafik wieder aus.
FOR i=-1 TO 0 STEP 0.02 ALPHAMODE 0 DRAWRECT 0,0,320,240,RGB(255,255,255) ALPHAMODE i DRAWSPRITE 1,7,94 SHOWSCREEN NEXT
Zum Schluss löschen wir wieder den Hintergrundbuffer.
ALPHAMODE 0
BLACKSCREENMit
RETURN AS_MENUübergeben wir die Kontrolle wieder der Hauptschleife in isdo.gbas. Was würde wohl passieren wenn wir hier anstatt AS_MENU die Konstante AS_INTRO zurückgeben würden...?
Nun zum Startmenu. Dieser Code steht in der Datei menu.gbas. Hier ben?tigen wir zuerst einige lokale Konstanten und Variablen.
// constants LOCAL MS_STARTGAME% = 0 LOCAL MS_OPTIONS% = 1 LOCAL MS_PASSWORD% = 2 LOCAL MS_EXIT% = 3 // variables LOCAL menuState% = 0 LOCAL buttonUp% = FALSE LOCAL buttonDown% = FALSE LOCAL done% = FALSE
Die MS_ steht für MenuState und beschreibt den jeweiligen Menüpunkt. buttonUp und buttonDown benötigen wir für den jeweiligen Buttonstatus dies ist vor allem bei der Pandora oder beim GP2x nötig!
//----------------------------------------------------------------------------- // I N I T M E N U //----------------------------------------------------------------------------- LOADBMP "./isdo/gfx/menu.png" GRABSPRITE 0,0,0 ,128,14 GRABSPRITE 1,0,22,128,14 GRABSPRITE 2,0,44,128,14 GRABSPRITE 3,0,66,128,14 GRABSPRITE 4,0,80,128,80
Wie beim Intro laden wir zuerst die Menügrafik und "grabben" anschliessend die einzelnen Bilder heraus. Hier sind es die einzelnen Menüeinträge.
In der Schleife
WHILE done=FALSE .... .... WEND RETURN AS_EXIT
wird der Wert von done überprüft falls dieser auf TRUE gesetzt ist, wird das Programm beendet. Wenn man genau hinsieht ist aber diese Abfrage nicht unbedingt nötig. Wir haben aber so beim Programmieren die Möglichkeit zu Testzwecken irgendwo durch done=TRUE abzubrechen.
Nun kommt die erste Eingabeabfrage. Dazu fragen wir ab ob beim GP2X der B-Button bzw. bei Windows die X-Taste gedrückt wird.
IF KEY(BUTTON_B) .... .... ENDIF
Je nachdem wird dann zum jeweiligen Menüpunkt gesprungen. Vorerst ist dies in unserem Programm nur EXIT.
SELECT menuState CASE MS_EXIT RETURN AS_EXIT ENDSELECT
Auch hier wieder: Was würde wohl passieren wenn wir hier anstatt AS_EXIT die Konstante AS_INTRO zurückgeben würden...?
Bei der Überprüfung der Pfeiltasten bzw. Pad auf die Auf- und Abbewegung müssen wir darauf achten, dass erst wieder zum nächsten Menüpunkt gesprungen wird, wenn wir die Taste wieder loslassen. Ansonsten brennt uns der Menücursor wie ein wildgewordenes Pferd durch.
IF KEY(BUTTON_DOWN) IF menuState<MS_EXIT IF buttonDown=FALSE INC menuState,1 buttonDown=TRUE ENDIF ENDIF ELSE buttonDown=FALSE ENDIF
Mit
DRAWRECT 0,0,320,240,0x0 DRAWSPRITE 4,96,128 DRAWSPRITE menuState,96,menuState*22+128 SHOWSCREEN
machen wir dann das Ganze auch noch sichtbar.
Das war's für den Teil. Hat doch nicht weh getan, oder? Falls Ihr Fragen zu diesem Tutorial habt, oder etwas nicht verstanden, dann könnt ihr euch im Pandora oder GLBasic Forum melden

