Controller-Fix: Joystick-Objekte wurden nach dem Namens-Auslesen freigegeben, dadurch lieferte SDL keine Events mehr. Jetzt offen halten + Hotplug. Neu: tools/controller_check.py zur Diagnose, Tests fuer Tastenbelegung (62).

This commit is contained in:
Project Bridge committed 2026-11-01 13:10:43 +00:00
1 parent a088c23a09
commit 5237b0a39c
7 files changed
+343 -17

No files matched your search

+23
View File
@@ -143,3 +143,26 @@ argument 'slots'` ab.
Support-Fällen.
* Verifiziert mit echtem Python 3.9.25 + pygame 2.6.1: 57 Tests grün,
Selbsttest läuft durch.
## 11. Controller wurde erkannt, reagierte aber nicht (v1.6)
Symptom auf dem MacBook: Im Start-Log stand `Controller: Xbox Series X Controller`,
aber keine Taste löste im Spiel etwas aus – mit Kabel und via Bluetooth.
Ursache: `connected_controllers()` öffnete den Joystick nur, um den Namen
auszulesen, und gab das Python-Objekt danach wieder frei. Damit schloss pygame
das Gerät, und SDL liefert für geschlossene Geräte **keine** Joystick-Events
mehr – die Tastatur funktionierte weiter, der Controller war stumm.
Behoben in `input_map.py`:
* Die Joystick-Objekte werden in `_OPEN_CONTROLLERS` offen gehalten
(`open_controllers()`), aufgerufen beim Start und bei
`JOYDEVICEADDED` / `JOYDEVICEREMOVED` (Hotplug).
* `open_controllers()` initialisiert das Joystick-Subsystem bei Bedarf selbst
und schluckt fehlende Geräte, statt abzubrechen.
* Neues Diagnose-Tool `tools/controller_check.py`: zeigt Name, Tasten-/
Achsen-/Hat-Anzahl, GUID und jedes eingehende Event samt abgeleiteter
Spiel-Aktion.
* Tests für die Tastenbelegung (Tasten 0–3, D-Pad als Hat, Stick mit
Deadzone), 62 Tests insgesamt.