Donnerstag, 18 Feb, 2010

Lektion 8

Jetzt ist es entlich soweit das wir mit unserem Programm in Kontakt treten wollen, so das es auf eine Anweisung von uns reagiert.

Im ersten Schritt möchten wir das es auf das Beenden, über das kleiner “x” rechts oben am Fenster reagiert und das Programm beendet.

lektion8-bild1.png

Als erstes deklarieren wir hierfür ein SDL_Event, in unserer globalen Deklaration:

 SDL_Event ereignis;

Was macht eigentlich dieses Event oder zu deutsch Ereignis. Die “ereignis” Variable speichert ein Event, wie z.B. Mausbewegung, Tastenanschlag, Mausbutton betätigung oder auch unser benutzen des kleinen “x”.

Die nächste änderung machen wir in unserer Main:

Als erstes legen wir eine Variable “ende” an, die wir dann auf 1 setzen wenn wir das Programm beenden wollen.

int main( int argc, char* args[] )
{
    int ende = 0;

Dann geht es weiter ohne veränderung:

    setze_bauteil_masse();
    initalisierung();
    dateien_laden();
	
    //Text rendern
    text = TTF_RenderText_Solid( schriftart, "Der Weltraum....", textfarbe );

Jetzt setzen wir unsere Hauptschleife, die solange durchlaufen wird bis ende gleich eins ist

    while(ende != 1){
        blitten();
	
        //Anzeige aktualisieren
        SDL_Flip( fenster );

Als nächstes Fragen wir mit der Funktion SDL_PollEvent, die anliegenden Events ab und schreiben sie in unsere “ereignis” Variable, bis kein Event mehr vorhanden ist:

        while(SDL_PollEvent( &ereignis)){

Ihr werdet euch jetzt bestimmt fragen: Warum durchlaufen wir jetzt noch eine Schleife, in der wir SDL_PollEvent aufrufen und was mein ehr mit “bis kein Event mehr vorhanden ist”.

Um das zu verstehen müsst ihr wissen, dass alle Ereignisse/Events in einer Art Warteschlange gesammelt werden. Stehlt euch also vor ihr Tippt einen Buchstaben auf der Tastatur, dann bewegt ihr die Maus, dann drückt ihr die linke Maustaste und dann beendet ihr das Programm mit dem kleinen “x” rechts oben. Dieser Ablauf sieht in der Warte schlange wiefolgt aus:

lektion8-bild2.png

SDL_PollEvent nimmt nun das älteste Ereignis und übergibt es an unsere Ereignis-Variable.

lektion8-bild3.png

Jetzt Prüfen wir ob unser kleines x gedrückt worden ist:

            if(ereignis.type == SDL_QUIT){
                ende = 1;
            }
        }
    }

Und nun der Rest und natürlich der ohne die Wartepause:

    aufraeumen();
    return 0;
}