【问题标题】:DirectInput analogue joystick rangeDirectInput 模拟操纵杆范围
【发布时间】:2009-06-27 21:46:56
【问题描述】:

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

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

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

【问题讨论】:

    标签: windows directx enumeration directinput


    【解决方案1】:

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

    【讨论】:

    • 这听起来像是我的答案,只需要实施和检查。提前致谢!
    【解决方案2】:

    正如 Goz 所说的那样,我做了以下工作:

    dev->EnumObjects(EnumElementsCallback, 0, DIDFT_ALL); BOOL CALLBACK EnumElementsCallback(LPCDIDEVICEOBJECTINSTANCE dev, LPVOID) { if ((dev->dwType & DIDFT_ABSAXIS) != 0) { DIPROPRANGE 范围; 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) { ... = 范围.lMin; ... = 范围.lMax; } } }

    【讨论】:

      【解决方案3】:

      发件人:http://www.wingmanteam.com/files/Tools/DXTweak/Readme.txt

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多