DirectInput模拟操纵杆范围

时间:2009-06-27 21:46:57

标签: windows directx enumeration directinput

我使用DirectInput处理输入设备,我枚举每个设备上的设备和元素。

在我的游戏手柄上使用模拟摇杆时,它们会报告0-65535范围内的值。对于所有类型的绝对轴,这总是吗?

如果没有:有没有办法找出DX8输入元素的范围DIDEVICEOBJECTDATA :: dwData(用DIDFT_ABSAXIS枚举)?我能想到的唯一另一个选择就是在我的应用程序中使用一些自制的内部校准,这听起来也是80年代的真实。

3 个答案:

答案 0 :(得分:6)

你不能使用GetProperty获取范围并传入适当的DIPROPRANGE结构来填充吗?使用DIPROP_RANGE GUID。

答案 1 :(得分:3)

正如Goz如此甜蜜地说,我做了以下工作:

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;
        }
    }
}

答案 2 :(得分:0)

来自:http://www.wingmanteam.com/files/Tools/DXTweak/Readme.txt

游戏控制器驱动程序通常会报告轴位置信息 作为DirectInput的0到655之间的整数值。直接输入 将这些值线性缩放到0到65535。