Seitenleiste

Community

Spieleprogrammierung

Allgemein

Tutorials

Knopfdruck/Input verarbeiten

Da wir nun erstmal Gebilde auf den Bildschirm gebracht haben, wäre es nun noch schön, wenn wir diese Gebilde auch zum Beispiel auf dem Bildschirm bewegen könnten, in Abhängigkeit von Benutzereingaben. Schließlich soll ein Spiel interaktiv sein. Die Knöpfe werden ebenfalls in einem Register jeweils als Bit repräsentiert. Das Register hat die Adresse 0x04000130. Wenn wir darauf einen Integer-Zeiger legen und mit dem Bit, was uns interessiert verunden, können wir abfragen ob ein Knopf gedrückt wurde oder nicht.

Die Knöpfe haben dabei folgenden „Wert“:

Knopf „Wert“
A 1
B 2
SELECT 4
START 8
Steuerkreuz Rechts 16
Steuerkreuz Links 32
Steuerkreuz Hoch 64
Steuerkreuz Runter 128
R 256
L 512

Das können wir also so als Konstanten in einer Header-Datei definieren; die Verwendung der Konstanten wird es uns deutlich einfacher machen, den geschriebenen Code später wieder zu lesen.

#define KEY_A 1
#define KEY_B 2
#define KEY_SELECT 4
#define KEY_START 8
#define KEY_RIGHT 16
#define KEY_LEFT 32
#define KEY_UP 64
#define KEY_DOWN 128
#define KEY_R 256
#define KEY_L 512

Wollen wir nun überprüfen ob ein Knopf gedrückt wurde, so genügt es den Inhalt des oben genannten Registers mit dem Wert der Knöpfe zu vergleichen. Wollen wir zum Beispiel wissen, ob das A-Knopf gedrückt wurde, dann geht das so:

int* keys=(int*) 0x04000130;
if ( !(*keys&KEY_A) )
{
    /** **/
}

Wollen wir mehrere Knöpfe gleichzeitig abfragen (zum Beispiel sollen gleichzeitig die zwei Schultertasten gedrückt werden), dann verknüpft man die Abfragen mit dem logischen UND-Operator:

int* keys=(int*) 0x04000130;
if ( !(*keys&KEY_R) && !(*keys&KEY_L) )
{
    /** **/
}