DirectInput vs. XInput

 von Sabine Pölzlbauer Danke euch allen, für das wertvolle Feedback bisher! Einige von euch würden sich auch wünschen nicht nur Xbox-Controller, sondern auch allgemeine Gamepad-Unterstützung zu haben. Also sind hier mal ein paar Fakten zu DirectInput und XInput aus Entwickler-Sicht. Microsoft hat XInput eingeführt, um Unterstützung für alle Xbox-Controller-Funktionen zu bieten. Die Vorteile sind, dass es ein einfaches Setup hat und auch dessen Verwendung sehr simpel ist. Heutzutage gibt es…

von Sabine Pölzlbauer

Danke euch allen, für das wertvolle Feedback bisher! Einige von euch würden sich auch wünschen nicht nur Xbox-Controller, sondern auch allgemeine Gamepad-Unterstützung zu haben. Also sind hier mal ein paar Fakten zu
DirectInput und XInput aus Entwickler-Sicht.
Microsoft hat XInput eingeführt, um Unterstützung für alle Xbox-Controller-Funktionen zu bieten. Die Vorteile sind, dass es ein einfaches Setup hat und auch dessen Verwendung sehr simpel ist. Heutzutage gibt es einige andere Game-Controller (z.B. Modelle von Logitech), welche die XInput Schnittstelle ebenfalls unterstützen. Und einige der Controller, welche eigentlich nur mit DirectInput funktionieren, könnten mit zusätzlicher Emulation Software, wie MotioninJoy oder x360ce, auch mit XInput funktionieren.
DirectInput kann dafür fast jedes Gerät detektieren, wenn ein Treiber vorhanden ist. Die API-Dokumentation ist leider manchmal nicht sehr informativ. Die Implementierung kann außerdem, aufgrund der verschiedenen Geräte mit unterschiedlichen Achsen und Tastenanordnung, und damit unterschiedlichen Datenformaten, schwierig werden.

DirectInput
Im Moment evaluieren wir die Situation (mit den wenigen verschiedenen Controllern, die uns zur Verfügung stehen), und implementieren einen technischen Prototypen. PlayStation3 Controller könnte von DirectInput unterstützt werden, jedoch auch erst nachdem der MotioninJoy Treiber installiert wurde. Es wurde auch versucht, den Controller als XInput Device zu emulieren, jedoch kann man zwar die Eigenschaften auslesen, nicht aber den Button-und Achsen-State (Meldung: „Device not connected“). Weird stuff! Zumindest sollte es mit DirectInput funktionieren ;).
Wir werden das nächste Mal sehen, welche Controller wir schlussendlich tatsächlich unterstützen werden, und ob wir dafür nur Xinput verwenden (so wie wir es gegenwärtig tun), oder doch auf einen DirectInput-Xinput-Hybriden umsteigen.