Microsoft DirectX 8.0 (C++)

ステップ 6 : ジョイスティックからのデータの取得

アプリケーションでは、ジョイスティック軸の移動よりも、ジョイスティック軸の位置の方が重要であることが多いので、デバイスからは、バッファリング データよりも直接データを取得することがよく行われる。直接データは、IDirectInputDevice8::GetDeviceState でポーリングすることによって取得できる。デバイスの状態が変化したとき、すべてのデバイス ドライバが Microsoft® DirectInput® に通知するわけではないことに注意する。したがって、デバイスの状態を確認する前に IDirectInputDevice8::Poll メソッドを呼び出すことを勧める。

Joystick アプリケーションは、Microsoft® Windows® メッセージ ループから次の関数を呼び出す。

HRESULT UpdateInputState(HWND hDlg)
{
    HRESULT     hr;
    CHAR        strText[128]; // デバイス状態のテキスト。
    DIJOYSTATE2 js;           // Direct Input ジョイスティックの状態。 
    CHAR*       str;

    if (NULL == g_pJoystick) 
        return S_OK;

    // 現在の状態を読み取るデバイスをポーリングする。
    hr = g_pJoystick->Poll(); 
    if (FAILED(hr))  
    {
        // ジョイスティックの再取得を試みる。
    }
    hr = g_pJoystick->GetDeviceState(sizeof(DIJOYSTATE2), &js);
    if (FAILED(hr))
        return hr; 

GetDeviceState の呼び出しに注意する。最初のパラメータは、データが返される構造体のサイズである。第 2 のパラメータは、DIJOYSTATE2 型 であるこの構造体のアドレスである。この構造体は、最高 6 つの軸、128 のボタン、および 4 つの視点ハットを保持する。サンプル プログラムは、すべての軸とボタン、および 1 つのスライダの状態を確認する。次にこの情報が、メイン ダイアログ ウィンドウに表示される。

ジョイスティック ボタンは、キーまたはマウス ボタンとまったく同じように機能する。戻り値バイトの上位ビットが 1 の場合は、ボタンが押されていることを示す。

その他の DirectInput チュートリアルについては、「DirectInput C/C++ チュートリアル」を参照すること。