SDL: JoystickMeinung
Motivation
BearbeitenJeder 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
BearbeitenWow, 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); ...