У меня есть любопытная проблема с SlimDX: мы видели это на Windows 7, и еще не тестировали другие версии: я использую связку дешевых USB-геймпадов (без серийного номера), и иногда один физический геймпад заканчивается до предоставления входных данных более чем одному объекту 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
.
Аппаратное обеспечение геймпада, похоже, работает правильно. Если я выполню ту же последовательность действий с тестером джойстика на панели управления, геймпады останутся различимыми.
Похоже, что идентификаторы GUID DirectInput распределяются на основе USB PID и VID, а затем порядка подключения идентичных геймпадов, а не физического пути к USB-порту, к которому они подключены. Если смешать разные модели геймпадов, проблема исчезнет.
Это похоже на ошибку SlimDX или даже на ошибку DirectInput - есть ли обходной путь для этого?