Satyria

SDL-Programmierung / Auf Eingaben reagieren

Im ersten Teil (Das erste Programm) wurde bereits auf die Events eingegangen. Hier beschreibe ich mal, was es sich dabei auf sich hat.

Unsere Funktion „Eingabe“, die wir bisher verwendet hat folgendes Aussehen:

Dieser Code ist relativ einfach gestrickt. Durch das while, wird solange gewartet bis es ein Event gibt. Durch die Abfrage switch wird dann verteilt. Hier wird nur auf das SDL_QUIT reagiert, was das Schließen des Fensters bedeutet. Da im Hauptprogramm der Rückgabewert geprüft wird, wird hier für das Beenden des Programms eine 1 zurückgegeben.

Diese Schleife wird in den meisten Programmen als Hauptschleife bezeichnet und eigentlich der Kern jeder Anwendung. Mit SDL_PollEvent wird die „event“-Struktur gefüllt, die wir dann Abfragen können. In dieser Struktur werden alle Ereignisse abgelegt, die hier geschehen sind. Dies können Tastatur eingaben, Joystick, die Maus oder auch der Touchscreen, Touchpad sein, die hier Ereignisse übergeben. Aber auch Interaktionen mit dem Fenster (z.B. das Schließsymbol).

Diese gesamten Ereignisse, werden in SDL in eine Warteschlange abgelegt. Die über „SDL_PollEvent“ abgefragt werden können. Wenn nichts mehr in der Warteschlange ist, wird eine NULL zurückgegeben.

Hier in unserer Grundstruktur habe ich bereits eine Abfrage eingebaut.
SDL_QUIT
Damit wird dem Programm mitgeteilt, dass der Benutzer das Programm schließen möchte. Wir setzen hier einfach eine eins nach „done“ welches wir dem Hauptprogramm zurückgeben.

Da es verschiedenen Arten gibt, wie hier interagiert werden kann, muss SDL auch verschieden reagieren. Z.B. bei einen Tastendruck, sollte man dann wissen, welche Taste den gedrückt wurde, oder wenn sich die Maus bewegt, da würde ich dann gerne wissen, wo sich die Maus befindet. Dies sind verschiedene Arten von Daten, die hier ausgewertet werden müssen. Zu jedem Event, wird dadurch zu dem eigentlich Zweck, eine weitere Struktur initialisiert, die auch entsprechend ausgewertet werden muss. Ich zeige hier hier nun ein paar Beispiele. Eine gesamte Auflistung findet ihr bei https://wiki.libsdl.org/SDL_EventType .

Auf Tastatureingaben eingehen

Wenn eine Taste gedrückt oder losgelassen wird, wird jeweils ein Event ausgelöst. Diese Events haben die Bezeichnung SDL_KEYDOWN und
SDL_KEYUP
Beide erzeugen die Struktur „key“.

Uint32TypeSDL_KEYDOWN oder SDL_KEYUP
Uint32 ZeitstempelZeitstempel, als es geschah
Uint32 Window IDFenster, auf dem der Fokus war
Uint8StatusDer Zustand der Taste; SDL_PRESSED oder SDL_RELEASED
Uint8WiederholungWenn es einen Wiederholtaste ist, wird hier keine NULL angezeigt
SDL_KeysymkeysymDiese Struktur zeigt welche Taste gedrückt oder losgelassen wurde.

Um es auch zu veranschaulichen, hier nun ein Beispiel.

Sourcecode: 6.c

Diesen Code kann man nun auch dazu benutzen, um die Tasten zu probieren, die man für die Anwendung verwenden will.

Das gleiche machen wir noch mit der Maus:

Sourcecode: 7.c

<< Übersicht | < Zeichnen | Sprites >