Microsoft DirectX 8.0 (Visual Basic)

ステップ 4 : キーボードからの直接データの取得

デバイスを取得すれば、アプリケーションは、デバイスからのデータの取得を開始できる。これを最も簡単に行う方法は、DirectInputDevice8.GetDeviceStateKeyboard メソッドを呼び出すことである。このメソッドは、呼び出し時の瞬間のデバイスの状態を取得する。

GetDeviceStateKeyboard メソッドは、単一のパラメータとして DIKEYBOARDSTATE 型を受け取る。このパラメータは単に、256 バイトの配列を含んでいる。

次のサンプル コードは、キーボードの状態を取得する例である。

Dim state As DIKEYBOARDSTATE
Call didev.GetDeviceStateKeyboard(state)
 

キーボードの現在の状態を取得した後、アプリケーションは、呼び出し時に押された特定のキーに応答することができる。バッファ中の各要素が 1 つのキーを表す。要素の上位ビットが 1 に設定されている場合、そのキーは、呼び出し時に押されていたことを示す。1 に設定されていない場合、キーは押されていない。あるキーの状態をチェックするには、CONST_DIKEYFLAGS 列挙の定数を使用して、そのキーに対するバッファのインデックスを作成する。

次のサンプル コードは、アプリケーションが矢印キーに応答して車を移動する方法を示している。

If state.Key(DIK_UP) And &H80 Then
  ' 車を上方向に移動する。
End If
if state.Key(DIK_DOWN) And &H80 Then
  ' 車を下方向に移動する。
End If
' 以下同様。
 

また、次のフォームを使用することもできる。

If state.Key(DIK_UP) Then
  ' 車を上方向に移動する。
End If
 

また、DIK_UP は単一のキーであり、専用の上向き矢印キーであることに注意する。DirectInput では、テンキー上の 8 つのキーを特異キーとして扱い、NUM LOCK が有効かどうかにかかわらず、同一の識別子が付与される。いずれかの矢印キーから入力を受け取るようにするには、次のようなコードを記述する必要がある。

If state.Key(DIK_UP) Or state.Key(DIK_NUMPAD8) Then
  ' 車を上方向に移動する。
End If