Platform SDK: DirectX |
ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「DirectInput C/C++ チュートリアル」を参照すること。
デバイスを取得すれば、アプリケーションは、デバイスからのデータの取得を開始できる。これを最も簡単に行う方法は、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