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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top