Code, um Werte von Gamepad zu lesen



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo Zusammen

    Ich habs jetzt mal mit SDL versucht.

    Aber ich bekomme Fehlermeldungen, wenn ich z.B. die Werte der Achsen ausgegeben haben möchte.
    Ich glaube, es könnte daran liegen, dass ich keinen Joystick habe sondern einen Gamepad mit 2 Analogsticks.

    Die Fehlermeldung sieht so aus:
    Unhandled exception at 0x6812ed6b in Test_1.exe: 0xC0000005: Access violation reading location 0xccccccd4.

    Ich hoffe, jemand kann mir weiter helfen!

    Gruss
    Atilla



  • Sieht so aus als ob du per Zeiger auf einen Bereich zugreifen willst, der nicht deinem Prozeß gehört.



  • Mein code sieht folgendermassen aus:

    SDL_Joystick *joy;
    	// Check for joystick
    	if(SDL_NumJoysticks()>0){
    	  // Open joystick
    	  joy=SDL_JoystickOpen(0);
    	  if(joy)
    	  {
    		printf("Opened Joystick 0\n");
    		printf("Name: %s\n", SDL_JoystickName(0));
    
    		//printf("Number of Axes: %s\n", SDL_JoystickNumAxes(joy));
    		//printf("Number of Buttons: %s\n", SDL_JoystickNumButtons(joy));
    		printf("Number of Balls: %s\n", SDL_JoystickNumBalls(joy));
    	  }
    	  else
    		printf("Couldn't open Joystick 0\n");
    

    Meine Probleme tauchen bei Zeile 11 und 12 auf.
    Sonst gibt er mir den richtigen Namen des Gamepads aus!

    Kann es nicht daran liegen, dass mein Gamepad 2 Sticks hat und diese Tatsache den Code überfordert???

    Danke für eure Hilfe...

    Gruss
    atilla



  • Kann es sein, dass du das hier vergessen hast?

    // Initialize the joystick subsystem
    SDL_InitSubSystem(SDL_INIT_JOYSTICK);
    

    http://www.libsdl.org/cgi/docwiki.cgi/SDL_5fJoystickOpen

    Geh bitte immer erstmal davon aus, dass dein Programm einen Fehler hat. Gerade eine Zugriffsverletzung deutet darauf hin.



  • Daran lag es nicht...
    Ich bekomme immer noch die gleiche Fehlermeldung!

    Ich hoffe ich bekomme weitere Vorschläge für eine Lösung....... 😕



  • Das hier läuft bei mir ohne Probleme, 1:1 aus der SDL-Doku übernommen:

    #include <SDL.h>
    #include <stdio.h>
    
    int main()
    {
        SDL_Joystick *joy;
    
        // Initialize the joystick subsystem
        SDL_InitSubSystem(SDL_INIT_JOYSTICK);
    
        // Check for joystick
        if(SDL_NumJoysticks()>0)
        {
            // Open joystick
            joy=SDL_JoystickOpen(0);
    
            if(joy)
            {
                printf("Opened Joystick 0\n");
                printf("Name: %s\n", SDL_JoystickName(0));
                printf("Number of Axes: %d\n", SDL_JoystickNumAxes(joy));
                printf("Number of Buttons: %d\n", SDL_JoystickNumButtons(joy));
                printf("Number of Balls: %d\n", SDL_JoystickNumBalls(joy));
            }
            else
                printf("Couldn't open Joystick 0\n");
    
            // Close if opened
            if(SDL_JoystickOpened(0))
                SDL_JoystickClose(joy);
        }
    }
    

    Kompiliert mit gccsdl-config --cflags --libsjoystick.c -o joystick

    edit: cpp statt code



  • das entspricht auch 1:1 meinem code... aber bei mir geht es nicht!

    Woran könnte das liegen? Ich versuche das ganze im Microsoft Visual Studio...
    Evtl. Fehler mit den libs oder Linker???
    🙄



  • atilla schrieb:

    das entspricht auch 1:1 meinem code... aber bei mir geht es nicht!

    Nein, tut es nicht. Vergleich doch bitte mal genau:

    Dein Code:

    printf("Number of Axes: %s\n", SDL_JoystickNumAxes(joy));
    printf("Number of Buttons: %s\n", SDL_JoystickNumButtons(joy));
    

    Mein Code (aus der Doku kopiert):

    printf("Number of Axes: %d\n", SDL_JoystickNumAxes(joy));
    printf("Number of Buttons: %d\n", SDL_JoystickNumButtons(joy));
    


  • :p
    hattest recht!
    Die Fehlermeldungen sind weg!
    Danke vielmals!

    Ich versuche mit JoystickGetAxis Werte von meinem Gamepad zu lesen...

    Ich hoffe, das klappt auch bald einmal!

    Gruss

    atilla



  • Noch eine Frage:

    Wie soll mein Code aussehen, wenn ich nun dynamisch die Werte auf der Konsole ausgelesen haben möchte?

    SDL_JoyAxisEvent scheint das zu sein, was ich brauche... Aber trotzdem bin ich nicht weitergekommen... 😕

    Probiert hab ich's auch damit

    Sint16 x_move, y_move;
    x_move=SDL_JoystickGetAxis(joy, 0);
    y_move=SDL_JoystickGetAxis(joy, 1);
    printf("x move: %d\n", x_move);
    printf("y move: %d\n", y_move);
    

    das klappt aber nicht wirklich. Ich bekomme bloss den Wert 0.

    Nützliche Hinweise???

    Danke schon im Voraus.

    Gruss
    atilla



  • Auch wenn Du das in einer Endlosschleife machst und die Analogsticks bis zum Anschlag in irgendeine Richtung drückst?

    Zeig bitte mal die Ausgabe von vorher, vielleicht werden die Sticks ja irgendwie anders angesprochen oder Du fragst nicht die richtige Achse ab oä.

    Btw, was meinst Du mit "dynamisch auslesen"? Wie denn sonst? Zeig einfach auch mal Deinen bisherigen Code! Und mach dafür evtl. mal einen frischen Thread auf, jetzt weißt Du ja schon, was Du verwenden möchtest, das dürfte der Thread-Titel reflektieren bzw. man muss nicht unbedingt die ganzen Antworten davor lesen...



  • Geschafft!!!

    🕶

    Alles läuft genau so, wie ich es wollte...

    gefehlt hatte nur das da:

    int SDL_JoystickEventState(SDL_QUERY);
    while(true)
    {
     SDL_JoystickUpdate();
     .
     .
     .
    }
    

    Ich danke euch allen sehr!!!

    Besten Dank!

    Viele Grüsse

    Atilla


Anmelden zum Antworten