DirectInput gama joystick análogo
-
20-08-2019 - |
Pergunta
eu uso DirectInput para dispositivos de entrada punho, eu enumerar dispositivos e elementos em cada dispositivo.
Ao usar os sticks analógicos no meu game pad, relatam valores no intervalo 0-65535. É este o sempre o caso para todos os tipos de eixo absoluta?
Se não: existe alguma maneira de descobrir a gama de de um elemento de entrada DX8 DIDEVICEOBJECTDATA :: dwData (enumerado com DIDFT_ABSAXIS)? A única outra opção que posso pensar é usar alguns casa feita de calibração interna dentro do meu aplicativo, e que soa muito anos 80 para ser verdade.
Solução 2
Como Goz tão docemente colocá-lo, eu fiz o seguinte, que trabalhou:
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; } } }
Outras dicas
Você não pode obter o intervalo usando GetProperty e passando uma estrutura DIPROPRANGE apropriado para ser preenchido? Use o GUID DIPROP_RANGE.
De: http://www.wingmanteam.com/files/Tools /DXTweak/Readme.txt
Um motorista de controlador de jogo normalmente relata eixo informações de posição como número inteiro valores entre 0 e 655 para DirectInput. Entrada direta linearmente escalas esses valores até 0 a 65535.