我对 SlimDX 有一个奇怪的问题:我们已经在 Windows 7 上看到了这个,还没有测试过其他版本:我正在使用一捆便宜的 USB 游戏手柄(没有序列号),有时一个物理游戏手柄会结束up 为多个Joystick
对象提供输入。
场景是:
- 将游戏手柄 1 插入集线器插槽 1。手柄显示
DirectInput.GetDevices
为 GUID f17b2d30。为焊盘创建Joystick
对象。 - 将游戏手柄 2 插入集线器插槽 2。手柄显示
DirectInput.GetDevices
为 GUID 5187d2d0。为焊盘创建Joystick
对象。 - 按下游戏手柄 2 上的按钮。状态没有变化。
- 按下游戏手柄 1 上的按钮。按钮出现在两个对象的
GetCurrentState()
后面。Poll()
- 拔下游戏手柄 2.
Poll()
其对象上的方法继续返回而没有错误,但它不再出现在DirectInput.GetDevices
. - 按下游戏手柄 1 上的按钮。按钮出现在两个对象的
GetCurrentState()
后面。Poll()
我检查了调试器中的对象。每个都Joystick
通过 引用正确的 GUID Information.InstanceGUID
,但每个都在 中具有相同的 USB 路径Properties.InterfacePath
。
游戏手柄硬件似乎工作正常 - 如果我使用控制面板操纵杆测试仪执行相同的序列,游戏手柄仍然不同。
DirectInput GUID 似乎是根据 USB PID 和 VID 分配的,然后是插入相同游戏手柄的顺序,而不是它们插入的 USB 端口的物理路径。如果我混合不同型号的游戏手柄,问题就会消失。
感觉就像是 SlimDX 甚至是 DirectInput 错误 - 有解决方法吗?