SDL: Joystick
Joysticks gibt es in vielen Varianten. Seien es schlichte Steuerknüppel oder Lenkräder mit Pedalen für Autorennspiele. Sofern ihr Eingabegerät als Joystick erkannt wird, wird es auch von SDL unterstützt. Unter Linux müssen Sie evtl. ein Modul hinzuladen.
Joystickunterstützung aktivieren
BearbeitenDamit die SDL mit Joysticks arbeiten kann, muss bei der Initialisierung der SDL bekannt gegeben werden, dass dies erwünscht ist.
int SDL_Init(SDL_INIT_JOYSTICK);
Anzahl der Joysticks
BearbeitenDie Anzahl der Joysticks können Sie mit
int SDL_NumJoysticks (void);
ermitteln.
Joystickport öffnen
BearbeitenUm einen Joystick nutzen zu können, muss der Joystickport geöffnet werden:
SDL_Joystick *SDL_JoystickOpen (int index);
index ist hierbei ein Wert zwischen 0 und SDL_NumJoysticks-1. Die Funktion gibt NULL zurück, wenn der angegbene Joystickport nicht existiert.
Joystickport schliessen
BearbeitenDer Joystickport kann mit folgender Funktion wieder geschlossen werden:
void SDL_JoystickClose (SDL_Joystick *JoyStick);
Informationen über den Joystick
BearbeitenOb ein bestimmter Joystickport geöffnet wurde, lässt sich mit der Funktion
int SDL_JoystickOpened (int index);
ermitteln. Die Funktion gibt 1 zurück, wenn der Port geöffnet ist, und wenn nicht 0.
Um die Joystickportnummer zu ermitteln, die zu einem geöffneten Joystick gehört, dient
int SDL_JoystickIndex (SDL_Joystick *JoyStick);
Die Anzahl der Achsen erhält man mit
int SDL_JoystickNumAxes (SDL_Joystick *JoyStick);
Die Anzahl der Trackballs (Rollbälle) eines Joysticks erhält man mit
int SDL_JoystickNumBalls (SDL_Joystick *JoyStick);
Trackbälle sind bei Joysticks sehr selten.
Die Zahl der Köpfe erhält man mit
int SDL_JoystickNumHats (SDL_Joystick *JoyStick);
Die Anzahl der Knöpfe kann mit
int SDL_JoystickNumButtons (SDL_Joystick *JoyStick);
ermittelt werden.
Joystickabfrage
BearbeitenÜblicherweise werden Ereignisse während der Event-Loop gemeldet, dies gilt auch für Joysticks. Alternativ kann man den Status der Joysticks auch manuell abfragen. Die Funktion
int SDL_JoystickEventState (int state);
beinflusst genau das Verhalten. Ist state gleich SDL_ENABLE, so werden Veränderungen des Joysticks über die Event-Loop gemeldet. Um die gegenwärtige Einstellung zu ermitteln können Sie SDL_QUERY benutzen. Joystickevents können Sie mit SDL_IGNORE ausschalten, dann bekommen Sie Ereignisse, die mit Joysticks zu tun haben, nicht in der Event-Loop gemeldet. Um in diesem Fall Joysticks abzufragen, müssen Sie zuerst SDL_JoystickUpdate () aufrufen, anschließend können Sie einige Funktionen benutzen, um den Zustand der Joysticks zu ermitteln. Beachten Sie, daß sie die folgenden Funktionen nicht benötigen, wenn Sie
SDL_JoystickEventState (SDL_ENABLE);
aufrufen.
Die aktuelle Position der Achsen ermitteln Sie mit
Sint16 SDL_JoystickGetAxis (SDL_Joystick *JoyStick, int achse);
achse ist hierbei ein Wert zwischen 0 und SDL_JoystickNumAxes (JoyStick)-1.
Den momentanen Status des Joystickkopfes kann man mit
Uint8 SDL_JoystickGetHat (SDL_Joystick *JoyStick, int kopf);
erfragen. Das Ergebnis ist ein durch oder verknüpfte Wert, bestehend aus folgenden Konstanten:
- SDL_HAT_CENTERED
- SDL_HAT_UP
- SDL_HAT_RIGHT
- SDL_HAT_DOWN
- SDL_HAT_LEFT
- SDL_HAT_RIGHTUP
- SDL_HAT_RIGHTDOWN
- SDL_HAT_LEFTUP
- SDL_HAT_LEFTDOWN
Den Status der Knöpfe fragt man mit
Uint8 SDL_JoystickGetButton (SDL_Joystick *JoyStick, int knopf);
ab. Die Funktion liefert 1, wenn der durch knopf angegebene Joystickknopf gedrückt wird, 0 sonst.
Um die Änderung des Trackballs zu ermitteln, dient die Funktion
int SDL_JoystickGetBall (SDL_Joystick *JoyStick, int ball, int *dx, int *dy);
Sie übergibt die seit dem letzten Aufruf erfolgte Positionsänderung des Trackballs ball in dx und dy. Die Funktion gibt 0 bei Erfolg zurück, sonst -1.
Sonstiges
BearbeitenDen "Namen" eines Joysticks erhalten Sie mit
const char *SDL_JoystickName (int index);