Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Steinbock

#61
Im zweiten Teil von unserem Tutorial erstellen wir nun ausf?hrbaren Code. Dazu findet Ihr im Anhang das dazugeh?rige GLBasic Projekt.
Nachdem Ihr die ZIP-Datei entpackt habt sollten folgende Dateien vorhanden sein:
  [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?
 
Als erstes kommentieren wir folgende Zeile im Mainloop (isdo.gbas) aus, da wir diese erst etwas sp?ter ben?tigen werden.
Code (glbasic) Select

  //CASE AS_LEVEL00 ; AppState=RunLevel00()


Anschliessend schauen wir uns mal die Datei intro.gbas etwas genauer an.
Code (glbasic) Select

//-----------------------------------------------------------------------------
//  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:
Code (glbasic) Select

    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.
Code (glbasic) Select

    // 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.
Code (glbasic) Select

    SLEEP 3000

Danach blenden wir die Grafik wieder aus.
Code (glbasic) Select

    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.
Code (glbasic) Select

    ALPHAMODE 0
    BLACKSCREEN

Mit
Code (glbasic) Select

    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.
Code (glbasic) Select

// 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 beim GP2X n?tig!
Code (glbasic) Select

//-----------------------------------------------------------------------------
//  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
Code (glbasic) Select

    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.
Code (glbasic) Select

        IF KEY(BUTTON_B)
        ....
        ....
        ENDIF

Je nachdem wird dann zum jeweiligen Men?punkt gesprungen. Vorerst ist dies in unserem Programm nur EXIT.   
Code (glbasic) Select

            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 Me?punkt
gesprungen wird, wenn wir die Taste wieder loslassen. Ansonsten brennt uns der Men?cursor wie ein wildgewordenes Pferd durch.
Code (glbasic) Select

        IF KEY(BUTTON_DOWN)
            IF menuState<MS_EXIT
                IF buttonDown=FALSE
                    INC menuState,1
                    buttonDown=TRUE
                ENDIF
            ENDIF
        ELSE
            buttonDown=FALSE
        ENDIF


Mit
Code (glbasic) Select

        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 zweiten Teil. Hat doch nicht weh getan, oder?
Falls Ihr Fragen zu diesem Tutorial habt, oder etwas nicht verstanden, dann nur zu, wenn ich helfen kann probiere ich zu helfen.








[attachment deleted by admin]
#62
Hallo miteinander

Ich m?chte mit einem kleinen Tutorial meine Programmiererfahrungen mit GLBasic weitergeben.
Es handelt sich um ein Grundger?st f?r einen Horizontal-Shooter das Routinen wie Intro, Men?, 2-Layerscrolling, Kollision oder Sound beinhaltet.

Falls ihr Fragen oder Anregungen habt dan postet die bitte nicht in diesem Thread sondern da: http://www.glbasic.com/forum/index.php?topic=2948.0. Danke.

EDIT 27.07.2009: Habe nun einen einfachen Tilemap-Editor inkl. Quellcode im Anhang hinzugef?gt.

Damit man auch was lernen kann werde ich das Tutorial aufteilen.
Wie das Ergebnis des Tutorials etwa aussieht k?nnt Ihr hier runterladen.
Windows Version:http://www.zshare.net/download/5735249659b47d37/
GP2X Version:http://www.zshare.net/download/57352743c3fbf5c9/
Steuerung->GP2X: Schuss=B
Steuerung->Win:   Schuss=X

Im ersten Teil beginnen wir mit dem Programmrumpf:

Code (glbasic) Select

//=============================================================================
//  T Y P E S
//=============================================================================


//=============================================================================
//  C O N S T A N T S
//=============================================================================

// application states
GLOBAL  AS_INTRO%       =   1
GLOBAL  AS_MENU%        =   2
GLOBAL  AS_LEVEL00%     =   10
GLOBAL  AS_EXIT%        =   255
// button map
GLOBAL  BUTTON_RIGHT%   =   205
GLOBAL  BUTTON_LEFT%    =   203
GLOBAL  BUTTON_DOWN%    =   208
GLOBAL  BUTTON_UP%      =   200
GLOBAL  BUTTON_A%       =   44
GLOBAL  BUTTON_B%       =   45
GLOBAL  BUTTON_R%       =   54
GLOBAL  BUTTON_START%   =   28
GLOBAL  BUTTON_VOLI%    =   201
GLOBAL  BUTTON_VOLD%    =   209


//=============================================================================
//  V A R I A B L E S
//=============================================================================

// application
GLOBAL  AppState%       =   AS_INTRO

LOCAL   done            =   FALSE


//-----------------------------------------------------------------------------
//  I N I T
//-----------------------------------------------------------------------------
    DRAWRECT 0,0,320,240,0
    SHOWSCREEN
    DRAWRECT 0,0,320,240,0
    SHOWSCREEN

//-----------------------------------------------------------------------------
//  M A I N L O O P
//-----------------------------------------------------------------------------
    WHILE done=FALSE
        SELECT AppState
            CASE AS_INTRO   ; AppState=RunIntro()
            CASE AS_MENU    ; AppState=RunMenu()
            CASE AS_LEVEL00 ; AppState=RunLevel00()
            CASE AS_EXIT    ; done=TRUE
            DEFAULT         ; done=TRUE
        ENDSELECT
    WEND
//-----------------------------------------------------------------------------
//  D E I N I T
//-----------------------------------------------------------------------------
    DRAWRECT 0,0,320,240,0
    SHOWSCREEN
    DRAWRECT 0,0,320,240,0
    SHOWSCREEN



Als erstes machen wir Platz f?r Type-Definitionen welche wir sp?ter hier einsetzen werden.
Anschliessend kommen die Konstanten welche wir im Programm immer GROSS schreiben werden. Mit AS_INTRO etc. beschreiben wir den jeweiligen Status des Programms (AS = application state). Danach folgen die Konstanten f?r die Tastenbelegung welche wir sp?ter noch ben?tigen werden.
Jetzt folgen die Variablen, wobei wir globale mit grossem und lokale mit kleinem Anfangsbuchstaben schreiben. Die globale Variable AppState initialisieren wir mit AS_INTRO da wir unser Programm mit dem INTRO starten wollen.
Dann l?schen wir den Framebuffer.

Nun kommt die Hauptschleife des Programms:
Wenn innerhalb der Schleife
Code (glbasic) Select

WHILE done=FALSE
  ...
WEND

der Wert der Variable done auf TRUE gesetzt wird, l?schen wir wieder den Framebuffer und das Proramm endet.

Code (glbasic) Select

        SELECT AppState
            CASE AS_INTRO   ; AppState=RunIntro()
            CASE AS_MENU    ; AppState=RunMenu()
            CASE AS_LEVEL00 ; AppState=RunLevel00()
            CASE AS_EXIT    ; done=TRUE
            DEFAULT         ; done=TRUE
        ENDSELECT

Hier ?berpr?fen wir das auszuf?hrende Programmmodul. Da wir den Wert von AppStateauf AS_INTRO gesetzt haben wird nat?rlich das Modul RunIntro() aufgerufen. Die verschiedenen Module sind Funktionen welche wiederum einen Wert zur?ckgeben, der dann sofort wieder in der Variable AppState gespeichert wird. Beim n?chsten Schleifendurchlauf wird diese erneut abgefragt.

So. Das w?rs mal f?r's erste. Im zweiten Teil werden wir uns mit dem Intro besch?ftigen.





[attachment deleted by admin]