我使用DirectInput来处理input设备,我列举了每个设备上的设备和元素。
在我的游戏手柄上使用模拟棒时,它们报告0-65535范围内的值。 这对于所有types的绝对轴始终是这种情况吗?
如果没有:有什么办法找出DX8input元素的DIDEVICEOBJECTDATA :: dwData(用DIDFT_ABSAXIS枚举)的范围? 我能想到的唯一的另一个select是在我的应用程序中使用一些自制的内部校准,而且这听起来也是80年代的事实。
你不能使用GetProperty获得范围,并传入适当的DIPROPRANGE结构来填充? 使用DIPROP_RANGE GUID。
Goz如此甜蜜地说,我做了以下工作:
dev-> EnumObjects(EnumElementsCallback,0,DIDFT_ALL); BOOL CALLBACK EnumElementsCallback(LPCDIDEVICEOBJECTINSTANCE dev,LPVOID) { 如果((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) { ... = range.lMin; ... = range.lMax; } } }
来自: http : //www.wingmanteam.com/files/Tools/DXTweak/Readme.txt
游戏控制器驱动程序通常将轴位置信息作为0到655之间的整数值报告给DirectInput。 DirectInput将这些值线性缩放到0到65535。