Диапазон аналоговых джойстиков прямого ввода
-
20-08-2019 - |
Вопрос
Я использую DirectInput для обработки устройств ввода, я перечисляю устройства и элементы на каждом устройстве.
При использовании аналоговых джойстиков на моем игровом планшете они сообщают значения в диапазоне 0-65535.Неужели это всегда случай для всех типов абсолютной оси?
Если нет:есть ли какой-либо способ узнать диапазон DIDEVICEOBJECTDATA входного элемента DX8::dwData (перечисляется с помощью DIDFT_ABSAXIS)?Единственный другой вариант, который я могу придумать, - это использовать какую-нибудь самодельную внутреннюю калибровку внутри моего приложения, и это звучит слишком 80-х, чтобы быть правдой.
Решение 2
Как мило выразился Гоз, я сделал следующее, и это сработало:
dev->EnumObjects(EnumElementsCallback, 0, DIDFT_ALL); BOOL CALLBACK EnumElementsCallback(LPCDIDEVICEOBJECTINSTANCE dev, LPVOID) { if ((dev->dwType & DIDFT_ABSAXIS) != 0) { DIPROPRANGE range; range.diph.dwSize = sizeof(DIPROPRANGE); range.diph.dwHeaderSize = sizeof(DIPROPHEADER); range.diph.dwHow = DIPH_BYID; range.diph.dwObj = dev->dwType; if (lDevice->mDIDevice->GetProperty(DIPROP_RANGE, &range.diph) == DI_OK) { ... = range.lMin; ... = range.lMax; } } }
Другие советы
Разве вы не можете получить диапазон, используя getProperty и передавая соответствующую структуру DIPROPRANGE для заполнения?Используйте идентификатор GUID DIPROP_RANGE.
От : http://www.wingmanteam.com/files/Tools/DXTweak/Readme.txt
Драйвер игрового контроллера обычно передает информацию о положении оси в виде целых значений от 0 до 655 в DirectInput.DirectInput линейно масштабирует эти значения от 0 до 65535.