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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top