Gama de joystick analógico de entrada directa
-
20-08-2019 - |
Pregunta
Uso DirectInput para manejar dispositivos de entrada, enumero dispositivos y elementos en cada dispositivo.
Cuando uso los sticks analógicos en mi gamepad, informan valores en el rango 0-65535. ¿Es este siempre el caso para todos los tipos de eje absoluto?
Si no es así: ¿hay alguna forma de averiguar el rango de DIDEVICEOBJECTDATA :: dwData de un elemento de entrada DX8 (enumerado con DIDFT_ABSAXIS)? La única otra opción que se me ocurre es usar alguna calibración interna hecha en casa dentro de mi aplicación, y eso suena demasiado en los 80 para ser verdad.
Solución 2
Como Goz lo dijo tan dulcemente, hice lo siguiente, que funcionó:
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; } } }
Otros consejos
¿No puede obtener el rango usando GetProperty y pasando una estructura DIPROPRANGE adecuada para que se complete? Use el GUÍA DIPROP_RANGE.
De: http://www.wingmanteam.com/files/Tools /DXTweak/Readme.txt
Un controlador de juego generalmente informa la información de posición del eje como valores enteros entre 0 y 655 a DirectInput. Entrada directa escala linealmente estos valores hasta 0 a 65535.