GLB:Intro und Menü

Aus PandoraWiki

Wechseln zu: Navigation, Suche

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
    BLACKSCREEN

Mit

    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

Als nächstes machen wir die Levelschleife und Scrolling