Domanda

Uso DirectInput per gestire i dispositivi di input, elenco i dispositivi e gli elementi su ciascun dispositivo.

Quando uso le levette analogiche sul mio game pad, riportano valori nell'intervallo 0-65535. Questo è sempre valido per tutti i tipi di assi assoluti?

In caso contrario: esiste un modo per scoprire l'intervallo di DIDEVICEOBJECTDATA :: dwData di un elemento di ingresso DX8 (elencato con DIDFT_ABSAXIS)? L'unica altra opzione che mi viene in mente è quella di utilizzare un po 'di calibrazione interna fatta in casa all'interno della mia app, e quel suono troppo anni '80 per essere vero.

È stato utile?

Soluzione 2

Come Goz ha detto così dolcemente, ho fatto quanto segue, che ha funzionato:

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;
        }
    }
}

Altri suggerimenti

Non puoi ottenere l'intervallo usando GetProperty e passare una struttura DIPROPRANGE appropriata da riempire? Utilizzare il GUID DIPROP_RANGE.

Da: http://www.wingmanteam.com/files/Tools /DXTweak/Readme.txt

Un driver di controller di gioco di solito riporta informazioni sulla posizione degli assi come valori interi compresi tra 0 e 655 su DirectInput. Input diretto ridimensiona linearmente questi valori fino a 0 ... 65535.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top