Platform SDK: DirectX

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

[C++]

ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「DirectInput C/C++ チュートリアル」を参照すること。

[Visual Basic]

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

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

以下のコードは、キーボードの状態を取得する例である。

Dim state As DIKEYBOARDSTATE
Call didev.GetDeviceStateKeyboard(state)
 

キーボードの現在の状態を取得した後、アプリケーションは、呼び出し時に押された特定のキーに応答することができる。バッファ中の各要素が 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)
  ' Move the vehicle up
End If
 

DirectInput の現在のバージョンにおけるすべてのボタンと同様に、キーがアップであれば、キーの状態を表す値はゼロである。ただし、将来のバージョンでは、複数の状態を持ち、ゼロ以外の値を複数持つ "アナログ" キーがサポートされる可能性がある。このため、特にキーボード以外のデバイスを扱う場合、後者のコードは慎重に使用しなければならない。

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

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