000
13.04.2004, 14:09 Uhr
tronaccount
|
Hallo (ich, hoffe, ich bin hier richtig...)
ich möchte unter VC Joystick-Daten auslesen und habe mir zu diesem Zweck die Simple DirectMedia Layer (SDL)-Bibliothek in der Version 1.2 runtergeladen und installiert. Jetzt wollte ich in der Konsole mal einen Probelauf machen und habe mir aus diversen Tutorials etwas Beispielcode rauskopiert und das Ganze laufen lassen. Bekomme auch keine Fehlermeldungen, auch wenn das Ganze sehr nach Spaghetticode aussieht.
Das Problem: Ich bekomme den Joystick initialisiert und bekomme auch den Namen ausgegeben über SDL_JoystickName(int). Sobald ich den Joystick aber über seinen Zeiger ansprechen möchte (z.B. mit SDL_JoystickNumAxes(*SDL_Joystick) oder mit SDL_JoystickGetAxis(SDL_Joystick, int)...), bekomme ich keine Werte. Das folgende Programm rückt außer dem Namen KEINE Joystick-Daten raus - was kann ich tun, um die Ausschläge auslesen zu können?
Danke, Tobias
C++: |
#include "SDL.h" #include "stdio.h" #include "iomanip.h"
int main( int argc, char* argv[] ) { printf("Initializing SDL.\n"); if((SDL_Init(SDL_INIT_JOYSTICK)==-1)){ printf("Could not initialize SDL: %s.\n", SDL_GetError()); return -1; } printf("SDL initialized.\n"); //Joystick rein SDL_JoystickEventState(SDL_ENABLE); SDL_Joystick *joystick; int jnum; SDL_Event event; joystick = SDL_JoystickOpen(0); // Öffnet den ersten Joystick int i; printf("%i joysticks were found.\n\n", SDL_NumJoysticks() ); printf("The names of the joysticks are:\n"); for( i=0; i < SDL_NumJoysticks(); i++ ) { printf(" %s\n", SDL_JoystickName(i)); printf("\nAxen: ", SDL_JoystickNumAxes(joystick)); printf("\nTrackballs: ", SDL_JoystickNumBalls(joystick)); printf("\nButtons: ", SDL_JoystickNumButtons(joystick)); }; void SDL_JoystickUpdate(void);
Sint16 moveX, moveY; //SDL_Joystick *joystick1 = SDL_JoystickOpen(0); moveX=SDL_JoystickGetAxis(joystick, 0); // moveX bekommt als Wert den Zustand der X Axe des Joysticks moveY=SDL_JoystickGetAxis(joystick, 1); // moveY bekommt als Wert den Zustand der Y Axe des Joysticks //SDL_JoystickClose(joystick1); cout << endl << moveX;
while(SDL_PollEvent(&event)) // Nachrichtenverarbeitungsschleife { switch(event.type) { case SDL_JOYAXISMOTION: // Bei Bewegung des Joysticks printf("\nJoystick: ", event.jaxis.which); // Welcher Joystick? printf("\nJoystickaxe: ", event.jaxis.axis); // Um welche Axe wurde Bewegt? printf("\nBewegung: ", event.jaxis.value); // Größe der Bewegung break; case SDL_JOYBUTTONDOWN: // Bei drücken einer Joysticktaste printf("\nJoystick: ", event.jbutton.which); // Welcher Joystick? printf("\nButton: ", event.jbutton.button); // Welcher der Buttons? printf("\nZustand: ", event.jbutton.state); // In welchem Zustand? break; case SDL_JOYBUTTONUP: // Beim loslassen einer Joysticktaste break; } }
//SDL beenden SDL_JoystickClose(joystick); // Schließt Joystick printf("Quiting SDL.\n"); SDL_Quit(); printf("Quiting....\n"); return 0; }
|
Dieser Post wurde am 13.04.2004 um 14:23 Uhr von tronaccount editiert. |