Code, um Werte von Gamepad zu lesen
-
Hallo Zusammen,
Ich brauche Hilfe!
Was muss ich alles tun, um von meinem Gamepad (Logitech Rumblepad 2) die Werte der Analogsticks und der einzelnen Buttons lesen zu können. Schlussendlich möchte ich mit diesen Werten weiterarbeiten können (kleine Motoren ansteuern...).
Ich muss jetzt aber auch zugeben, dass ich sonst nicht viel Ahnung hab vom Programmieren...
Kann mir jemand da weiterhelfen?
ati
-
gibts keine API für des Ding?
Da musst (vermutlich) irgendwie über den Treiber ran kommen, denk ich mal.
-
Das weiss ich eben nicht.
Auf jeden Fall hab ich meinen Gamepad schon mit Matlab/Simulink verbunden und da klappt es sehr gut.
Nur weiss ich nicht, wie mein C-code auszusehen hat...
-
Ich denke mal, dein Gamepad wird genauso im Betriebssystem angesteuert werden, wie ein Normaler Joystick. Du hast mehrere Möglichkeiten:
- DirectX (DirectInput) benutzen.
- Die SDL kann auch Joysticks ansteuern.Such einfach mal im Internet nach Tutorials.
Btw.: Das lässt sich mit reinem C++ nicht machen. Du musst also Betriebssystemspeziefische APIs benutzen. Also welches Betriebssystem willst du verwenden?
-
Zuerst fang ich mal mit Windows an.
Danach sollte es aber mit Linux laufen...
Ich suche mal weiter nach tutorials.
Danke...
-
atilla schrieb:
Zuerst fang ich mal mit Windows an.
Danach sollte es aber mit Linux laufen...
Ich suche mal weiter nach tutorials.
Danke...Wenn es mit beiden laufen soll, dann versuch es als erstes mit der SDL.
-
SDL ist auch wirklich einfach. Vor allem wenn man auch gleich Grafik, Sound und Netzwerk damit erledigt. Wenn man das denn alles braucht.
-
Versuchs mal mit dem
Forum dazu ist hier:
http://www.wreckedgames.com/forum/Ist plattformübergreifend und C++, keine C Library.
-
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
gcc
sdl-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...