SDL: Joystick

Aus Wikibooks

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[Bearbeiten]

Damit 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[Bearbeiten]

Die Anzahl der Joysticks können Sie mit

 int SDL_NumJoysticks (void);

ermitteln.

Joystickport öffnen[Bearbeiten]

Um 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[Bearbeiten]

Der Joystickport kann mit folgender Funktion wieder geschlossen werden:

 void SDL_JoystickClose (SDL_Joystick *JoyStick);


Informationen über den Joystick[Bearbeiten]

Ob 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[Bearbeiten]

Den "Namen" eines Joysticks erhalten Sie mit

 const char *SDL_JoystickName (int index);