SDL: JoystickMeinung

Aus Wikibooks

Motivation[Bearbeiten]

Jeder richtige Spieler hat diesen Steuerknüppel der noch längst nicht aus der Mode gekommen ist. Mit ihm machen nämlich nicht nur Flugsimulatoren oder Auto-Rennen fast doppelt soviel Spaß, sondern auch eine Menge weiterer Spiele Arten. So kommt einen doch manchmal der Wunsch auf auch in seinem Spiel dieses coole Eingabegerät zu unterstützten und mit der SDL ist es wie immer vollkommen simpel. Was wir jetzt jedoch wissen sollten ist, dass ein Joystick in der SDL ein Objekt vom Typ SDL_Joystick ist. Hier aber erstmal ein Beispiel:

Quellcode[Bearbeiten]

...
SDL_Joystick *joystick;
int jnum;
jnum = SDL_NumJoysticks(); // Weist der Ganzzahl Variable "jnum" die Anzahl der Joysticks zu 
if (jnum == 0) { 
    printf("Keine Joysticks gefunden!"); // Falls kein Joystick gefunden wurde 
    exit(1);
}
joystick = SDL_JoystickOpen(0); // Öffnet den ersten Joystick
if (joystick == NULL) {
    printf("Kann auf Joystick nicht zugreifen!");
    exit(1);
} else {
    printf("\nName des Joysticks: ", SDL_JoystickName(0));
    printf("\nAchsen: ", SDL_JoystickNumAxes(joystick));
    printf("\nTrackballs: ", SDL_JoystickNumBalls(joystick));
    printf("\nButtons: ", SDL_JoystickNumButtons(joystick));    
}
...
SDL_JoystickClose(joystick); // Schließt Joystick
...
while (SDL_PollEvent(&event)) { // Nachrichtenverarbeitungsschleife
    switch(event.type) {
    ...
    case SDL_JOYAXISMOTION: // Bei Bewegung des Joysticks
        printf("\nJoystick: %d", event.jaxis.which); // Welcher Joystick?
        printf("\nJoystickachse: %d", event.jaxis.axis); // Um welche Achse wurde bewegt?
        printf("\nBewegung: %d", event.jaxis.value); // Größe der Bewegung
        break;
    case SDL_JOYBUTTONDOWN: // Bei drücken einer Joysticktaste
        printf("\nJoystick: %d", event.jbutton.which); // Welcher Joystick?
        printf("\nButton: %d", event.jbutton.button); // Welcher der Buttons?
        printf("\nZustand: %d", event.jbutton.state); // In welchem Zustand?
        break;
    case SDL_JOYBUTTONUP: // Beim loslassen einer Joysticktaste
        ...
        break;
    ...
    }
}
...

Erläuterungen[Bearbeiten]

Wow, das ist ne ganze Menge Krams, aber eigentlich immernoch sehr einfach und ich denke, dass jeder nachdem er sich dieses Beispiel ordentlich betrachtet hat schon ein bisschen Ahnung hat, wie er auf einen Joystick zugreifen kann. Falls es dann doch noch etwas verwirrend ist sollte man sich hier in der Dokumentation ein bisschen umschauen, aber nichtsdestotrotz will ich hier noch die Funktion: SDL_JoystickGetAxis erläutern, die meiner Meinung nach bei der Nutzung eines Joysticks in einem Spiel sehr wichtig ist. Hier ein Beispiel:

Sint16 moveX, moveY;
SDL_Joystick joystick = SDL_JoystickOpen(0);
...
moveX=SDL_JoystickGetAxis(joystick, 0); // moveX bekommt als Wert den Zustand der X-Achse des Joysticks
moveY=SDL_JoystickGetAxis(joystick, 1); // moveY bekommt als Wert den Zustand der Y-Achse des Joysticks
...
SDL_JoystickClose(joystick);
...