Прямой аналоговый диапазон джойстика - PullRequest
1 голос
/ 28 июня 2009

Я использую DirectInput для обработки устройств ввода, перечисляю устройства и элементы на каждом устройстве.

При использовании аналоговых джойстиков на моей игровой клавиатуре они сообщают значения в диапазоне 0-65535.Это всегда относится ко всем типам абсолютной оси?

Если нет: есть ли способ узнать диапазон DIDEVICEOBJECTDATA :: dwData элемента ввода DX8 (перечисляемый с помощью DIDFT_ABSAXIS)?Единственный другой вариант, о котором я могу подумать, - это использовать в моем приложении какую-то внутреннюю внутреннюю калибровку, и это тоже звучит как 80-е, чтобы быть правдой.

Ответы [ 3 ]

6 голосов
/ 01 июля 2009

Разве вы не можете получить диапазон, используя GetProperty и передавая соответствующую структуру DIPROPRANGE для заполнения? Используйте DIPROP_RANGE GUID.

3 голосов
/ 02 июля 2009

Как сладко выразился Гоз, я сделал следующее:

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;
        }
    }
}
0 голосов
/ 01 июля 2009

От: http://www.wingmanteam.com/files/Tools/DXTweak/Readme.txt

Драйвер игрового контроллера обычно сообщает информацию о положении оси как целочисленные значения от 0 до 655 для DirectInput. Прямой ввод линейно масштабирует эти значения от 0 до 65535.

...