Question

J'utilise DirectInput pour gérer les périphériques d'entrée, j'énumère des périphériques et des éléments sur chaque périphérique.

Lors de l’utilisation des sticks analogiques sur ma console de jeu, ils affichent des valeurs comprises entre 0 et 65535. Est-ce toujours le cas de tous les types d'axes absolus?

Si ce n'est pas le cas: existe-t-il un moyen de connaître l'étendue de DIDEVICEOBJECTDATA :: dwData d'un élément d'entrée DX8 (énuméré avec DIDFT_ABSAXIS)? La seule autre option à laquelle je peux penser est d’utiliser un étalonnage interne fait maison dans mon application, et ce son aussi trop années 80 pour être vrai.

Était-ce utile?

La solution 2

Comme le dit si gentiment Goz, j’ai fait ce qui suit:

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

Autres conseils

Ne pouvez-vous pas obtenir la plage en utilisant GetProperty et en passant une structure DIPROPRANGE appropriée à remplir? Utilisez le GUID DIPROP_RANGE.

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

Un pilote de contrôleur de jeu rapporte généralement des informations sur la position de l'axe. sous forme de valeurs entières comprises entre 0 et 655 dans DirectInput. DirectInput met à l'échelle linéairement ces valeurs jusqu'à 0 à 65535.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top