Ich habe mir einen zweiten XBOX-360-Controller besorgt, um sicherzustellen, dass es nicht am Controller lag. Auch er wird doppelt erkannt. Schließe ich beide Controller an, habe ich laut InitJoystick() also vier Joysticks, die ich nutzen kann.
Ich kann auch tatsächlich mit Hilfe der Joystickbefehle (ExamineJoystick, JoystickAxisX, JoystickAxisY, usw.) auf zwei Joysticks zugreifen, selbst wenn nur ein XBOX-360-Controller angeschlossen ist.
Interessant ist, dass die "beiden" Controller nicht nur unterschiedliche Namen haben, sondern auch ein unterschiedliches Layout, was die Tasten angeht. Hier eine Übersicht. Was nach dem "=" steht, ist der Wert den Purebasic ausgibt, wenn man den Stick bewegt bzw. den Button drückt.
Ein Tastendruck auf dem Controller, wird in Purebasic als Tastendruck auf XBOX 360 For Windows (Gamepad 0) und auf XBox 360 controller 1 (Gamepad 1) registriert
Linker Stick:
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 0, X-Axis = -1
XBox 360 controller 1 (Gamepad 1): Pad 0, X-Axis = -1
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 0, X-Axis = 1
XBox 360 controller 1 (Gamepad 1): Pad 0, X-Axis = 1
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 0, Y-Axis = -1
XBox 360 controller 1 (Gamepad 1): Pad 0, Y-Axis = -1
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 0, Y-Axis = 1
XBox 360 controller 1 (Gamepad 1): Pad 0, Y-Axis = 1
D-Pad:
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 2, X-Axis = -1
XBox 360 controller 1 (Gamepad 1): Button 7 = 1
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 2, X-Axis = 1
XBox 360 controller 1 (Gamepad 1): Button 8 = 1
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 2, Y-Axis = 1
XBox 360 controller 1 (Gamepad 1): Button 5 = 1
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 2, Y-Axis = -1
XBox 360 controller 1 (Gamepad 1): Button 6 = 1
Rechter Stick:
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 1, X-Axis = 1
XBox 360 controller 1 (Gamepad 1): Pad 1, X-Axis = 1
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 1, X-Axis = -1
XBox 360 controller 1 (Gamepad 1): Pad 1, X-Axis = -1
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 1, Y-Axis = -1
XBox 360 controller 1 (Gamepad 1): Pad 1, Y-Axis = -1
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 1, Y-Axis = 1
XBox 360 controller 1 (Gamepad 1): Pad 1, Y-Axis = 1
Button X
Controller (XBOX 360 For Windows) (Gamepad 0): Button 3 = 1
XBox 360 controller 1 (Gamepad 1): Button 3 = 1
Button Y
Controller (XBOX 360 For Windows) (Gamepad 0): Button 4 = 1
XBox 360 controller 1 (Gamepad 1): Button 4 = 1
Button A
Controller (XBOX 360 For Windows) (Gamepad 0): Button 1 = 1
XBox 360 controller 1 (Gamepad 1): Button 1 = 1
Button B
Controller (XBOX 360 For Windows) (Gamepad 0): Button 2 = 1
XBox 360 controller 1 (Gamepad 1): Button 2 = 1
Button Start
Controller (XBOX 360 For Windows) (Gamepad 0): Button 8 = 1
XBox 360 controller 1 (Gamepad 1): Button 9 = 1
Button Back
Controller (XBOX 360 For Windows) (Gamepad 0): Button 7 = 1
XBox 360 controller 1 (Gamepad 1): Button 10 = 1
LB
Controller (XBOX 360 For Windows) (Gamepad 0): Button 5 = 1
XBox 360 controller 1 (Gamepad 1): Button 13 = 1
RB
Controller (XBOX 360 For Windows) (Gamepad 0): Button 6 = 1
XBox 360 controller 1 (Gamepad 1): Button 14 = 1
LT
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 0, Z-Axis = 1
XBox 360 controller 1 (Gamepad 1): Pad 0, Z-Axis = 1
RT
Controller (XBOX 360 For Windows) (Gamepad 0): Pad 0, Z-Axis = -1
XBox 360 controller 1 (Gamepad 1): Pad 1, Z-Axis = 1
Linker Stick gedrückt
Controller (XBOX 360 For Windows) (Gamepad 0): Button 9 = 1
XBox 360 controller 1 (Gamepad 1): Button 11 = 1
Rechter tick gedrückt
Controller (XBOX 360 For Windows) (Gamepad 0): Button 10 = 1
XBox 360 controller 1 (Gamepad 1): Button 12 = 1
Das D-Pad wird einmal als Pad, einmal als vier Buttons erkannt. Auch die Schultertasten werden einmal als AxisZ und einmal als Buttons erkannt.
Schließlich habe ich dasselbe moch einmal mit einem XBOX-One-Controller versucht. Auch er wird doppelt erkannt. Er trägt einmal den klangvollen Namen "Bluetooth XINPUT-kompatibles Eingabegerät" und einmal heißt er "XBox 360 controller 1". Diesmal reagiert aber nur "XBox 360 controller 1" auf Befehle wie ExamineJoystick, JoystickAxisX, JoystickAxisY, usw.
Mein Lernertrag: Wenn es einen Controller mit dem Namen "XBox 360 controller 1", muss einer, der sonst noch vorhandenen Controller ignoriert werden. Wie ich zuverlässig herausfinde, welcher das ist, weiß ich noch nicht.