Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Joystick mit SDL auslesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.04.2004, 19:31 Uhr
tronaccount



Hallo nochmal,

laßt Euch nicht von dem langen Code abschrecken, das Ding macht schon im zweiten Block Ärger:

C++:
printf("    %s\n", SDL_JoystickName(i));
        printf("\nAxen: ", SDL_JoystickNumAxes(joystick));
        printf("\nTrackballs: ", SDL_JoystickNumBalls(joystick));
        printf("\nButtons: ", SDL_JoystickNumButtons(joystick));  


Die erste Zeile liefert noch ein Ergebnis (die Joystickbezeichnung), die letzten drei Zeilen werden ohne Ausgabe der Werte abgearbeitet...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.04.2004, 15:02 Uhr
tronaccount



Hab's jetzt, läuft!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: