ステップ 6 :ジョイスティックからのデータの取得
ステップ 6 :ジョイスティックからのデータの取得
アプリケーションでは、ジョイスティック軸の移動よりも、ジョイスティック軸の位置の方が重要であることが多いので、デバイスからは、バッファリング データよりも直接データを取得することがよく行われる。直接データは、IDirectInputDevice8::GetDeviceState でポーリングすることによって取得できる。デバイスの状態が変化したときに、すべてのデバイス ドライバが Microsoft® DirectInput® に通知するわけではない。したがって、デバイスの状態を確認する前に IDirectInputDevice8::Poll メソッドを呼び出すことを勧める。
Joystick アプリケーションは、Microsoft Windows® メッセージ ループから次の関数を呼び出す。
HRESULT UpdateInputState(HWND hDlg)
{
HRESULT hr;
CHAR strText[128]; // Device state text
DIJOYSTATE2 js; // Direct Input joystick state
CHAR* str;
if (NULL == g_pJoystick)
return S_OK;
// Poll the device to read the current state
hr = g_pJoystick->Poll();
if (FAILED(hr))
{
// Attempt to reacquire joystick
}
hr = g_pJoystick->GetDeviceState(sizeof(DIJOYSTATE2), &js);
if (FAILED(hr))
return hr;
IDirectInputDevice8::GetDeviceState の呼び出しに注意する。最初の引数は、データが返される構造体のサイズである。第 2 引数は、DIJOYSTATE2 型であるこの構造体のアドレスである。この構造体は、最大 6 つの軸、128 のボタン、および 4 つの視点ハットを保持する。サンプル プログラムは、すべての軸とボタン、および 1 つのスライダの状態を確認する。次に、この情報がメイン ダイアログ ウィンドウに表示される。
ジョイスティック ボタンは、キーまたはマウス ボタンとまったく同じように機能する。戻り値バイトの上位ビットが 1 の場合は、ボタンが押されていることを示す。
その他の DirectInput チュートリアルについては、「DirectInput C/C++ チュートリアル」を参照すること。