Hier stelle ich Euch mein Tool zur einfachen Abfrage von Joypad-Eingaben vor.
Die Idee dahinter war, dass ich ohne etwas an meinem Hauptprogramm ändern zu müssen jederzeit ein anderes Pad anschließen kann.
Ich habe hier ein kabelloses X-Box Pad und ein PS2 Nachbau von HAMA.
Wenn die Batterie allerdings mal ausgehen sollte, hätte ich keinen Zugriff mehr auf mein Programm.
Würde ich einfach ein anderes Pad anschließen, wäre die komplette Steuerung durcheinander.
Dafür habe ich mir dieses Modul geschrieben, welches alle Eingaben in ein einheitliches Format übersetzt.
Dies kann sicherlich auch für andere User sehr nützlich sein, da man sich nicht großartig mit Pygame auseinandersetzen muss,
und mit wenigen Handgriffen sofort in sein Projekt einbinden kann.
Ich denke da z.B. an Roboter-Steuerung, Menu-Steuerung, und vieles weitere.
In diesem Modul gibt es zwei Funktionen.
Einmal eine Abfrage für die Analog-Achsen und eine Abfrage für die einzelnen Buttons.
Ich habe das aufgesplittet, damit man je nach Bedarf einzelne Zustände abfragen kann.
Beim Starten erkennt das Modul, welches Pad angeschlossen ist und stellt die Konfiguration entsprechend um.
Zur Zeit ist das X-Box Pad und das HAMA Pad integriert. Andere Pads können bei Bedarf ergänzt werden.
Zunächst wird nur ein Pad abgefragt, was aber für die meisten Projekte vollkommen ausreichen sollte.
Für die Namen der Buttons habe ich mich an der Belegung des X-Box Pads orientiert,
um das 1. einheitlicher zu halten und 2. weil die Beschriftung vom HAMA Pad schon abgewetzt ist
Kennt das Modul das angeschlossene Pad nicht, ist keins angeschlossen, oder fehlerhafte Werte werden abgefragt,
gibt das Modul eine entsprechende Fehlermeldung zurück.
Das Programm kann entweder direkt in den eigenen Code eingebaut werden oder (was kompfortabler und übersichtlicher ist) als Modul importiert werden.
Dafür sollte das Programm in dem gleichem Ordner wie das Haupt-Programm liegen (oder dort, wo Python nach Modulen sucht).
Importiert werden die Funktionen mit
Anwendung:
Es gibt mehrere Möglichkeiten, das Joypad abzufragen.
Am Programmende habe ich ein kleines Beispiel angehängt, wo man alles mal ausprobieren kann.
Startet man "eingabe.py" also alleine, werden alle Joypad-Werte angezeigt.
Wahlweise kann auch das im Attachment befindliche "test.py" Programm gestartet werden.
Für weitere Informationen kann die help Funktion genutzt werden.
Dafür startet man die Python-Shell und gibt folgendes ein:
In eurem Code muss nur die Zeile
stehen und dann kann es sofort verwendet werden.
joy(Taste, Typ)
Hiermit werden die Buttons abgefragt. Die Funktionsweise der Werte "Taste" und "Typ" erkläre ich mal kurz:
a = joy( 0 , TYP)
Es wird ein Tupel zurückgegeben, mit den aktuellen Zuständen ALLER Buttons.
a[0] ist ein String und gibt den Namen des zuletzt gedrückten Buttons wieder.
a[ 1 - 17 ] zeigt den Zustand der einzelnen Buttons an. Dabei steht a[1] z.B. für den A Button. 1 ist gedrückt und 0 ist nicht gedrückt. Die genaue Nummerierung kann im Code nachgeschaut werden (bnames). Diese Funktion eignet sich z.B. um mehrere Tasten GELEICHZEITIG abzufragen (für Tastenkombinationen).
Beachte: das HAMA Pad hat nur 16 Tasten. Beim X-Box Pad kann zusätzlich der X-Button abgefragt werden.
a = joy( 1 - 17 , TYP)
Es wird 1 oder 0 zurückgegeben und entspricht dem Zustand der abgefragten Taste (1-17)
a = joy( TASTE , 0 )
Die Abfrage erfolgt SOFORT
a = joy( TASTE , 1 )
Das Programm WARTET bis eine Taste gedrückt wurde. Demzufolge gibt es auch nur eine 1 zurück, wenn die entsprechende Taste gedrückt wurde. Hier ist Vorsicht geboten, denn wenn der falsche Button abgefragt wird, wartet das Programm bis in alle Ewigkeit...
joy_a()
Die zweite Funktion dient der Abfrage der Analog-Achsen
a = joy_a()
Hier kommt ein tupel zurück mit den Werten der jeweiligen Achsen.
a[0] = Linker Stick vertikal (-10 = UP , +10 = DOWN)
a[1] = Linker Stick horizontal (-10 = LEFT, +10 = RIGHT)
a[2] = Rechter Stick vertikal (-10 = UP , +10 = DOWN)
a[3] = Rechter Stick horizontal (-10 = LEFT, +10 = RIGHT)
a[4] = L2 Regler (falls vorhanden) (0 - 10)
a[5] = R2 Regler (falls vorhanden) (0 - 10)
Die Werte -1 und +1 habe ich auf 0 abgeglättet, da besonders das X-Box Pad Probleme macht, eine Nullstellung zu finden.
Wer jetzt noch Verbesserungsvorschläge hat oder vllt. sein eigenes Pad eingebunden hat,
bzw. Hilfe dabei braucht kann sich gerne hier drunter melden.
Über Erfahrungsberichte / Feedback würde ich mich auch sehr freuen.
Dann wünsche ich mal viel spass und gutes Gelingen mit diesem kleinem Tool :thumbs1:
Euer Scholli!
___________________________________________________________________________________________________________________
Hinweis: Diesen Thread sollte man sich mal angucken.
Da geht es um das abschalten der Debugmessages von Pygame, damit man sich das Terminal nicht vollspammt.
Dieser "Fehler" wird wohl erst in einer späteren Version von Pygame endgültig eleminiert. Solange muss man selber Hand anlegen.
Ist aber von meigrafds SUPER beschrieben und schnell erledigt.
Danke an dieser Stelle nochmal dafür!
___________________________________________________________________________________________________________________