Microsoft DirectX 8.0 (C++) |
アプリケーションでは、ジョイスティック軸の移動よりも、ジョイスティック軸の位置の方が重要であることが多いので、デバイスからは、バッファリング データよりも直接データを取得することがよく行われる。直接データは、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++ チュートリアル」を参照すること。