Platform SDK: DirectX |
キーボードからバッファリング データを取得するには、バッファ サイズを設定しなければならない (「デバイス プロパティ」を参照すること)。この手順は、バッファのデフォルト サイズがゼロであるので不可欠である。
また、DIDEVICEOBJECTDATA 構造体の配列も宣言する必要がある。この配列は、最大でバッファ サイズと同数の要素を持つことができる。1 度の呼び出しでバッファの内容全体を取得する必要はないが、配列内の 1 要素だけを保持して、バッファが空になるまで 1 つずつイベントを取得することができる。
キーボード デバイスの取得後は、IDirectInputDevice7::GetDeviceData メソッドを使っていつでもバッファを調べたりフラッシュしたりすることができる (「バッファリング データと直接データ」を参照すること)。
DIDEVICEOBJECTDATA 配列の各要素は、単一キーの状態変化、すなわち、押下と解放を表す。DirectInput は、キーボードから直接データを取得するために、コントロール パネルの文字反復の設定はすべて無視する。すなわち、キーストロークは、キーが押下されている時間の長短に関係なく、1 度しかカウントされないということになる。
配列中の要素がどのキーを指すかは、DirectInput のキーボード デバイス定数と、DIDEVICEOBJECTDATA 構造体の dwOfs メンバを比較することにより確認できる (「キーボード データの解釈」も参照すること)。
キーの状態変化データは、DIDEVICEOBJECTDATA 構造体の dwData メンバに格納されている。意味を持つのは、dwData の下位バイトのみである。上位ビットは、キーが押下されたときに設定され、キーが離されたときに消去される。言い換えれば、(dwData & 0x80) がゼロでないとき、キーが押されていることになる。
また、DIDEVICEOBJECTDATA 型の配列も宣言する必要がある。この配列は、最大でバッファ サイズと同数の要素を持つことができる。1 度の呼び出しでバッファの内容全体を取得する必要はないが、配列内の 1 要素だけを保持して、バッファが空になるまで 1 つずつイベントを取得することができる。
キーボード デバイスの取得後は、DirectInputDevice.GetDeviceData メソッドを使っていつでもバッファ内のイベントを調べたりフラッシュしたりすることができる (「バッファリング データと直接データ」を参照すること)。
DIDEVICEOBJECTDATA 配列の各要素は、単一キーの状態変化、すなわち、押下と解放を表す。DirectInput は、キーボードから直接データを取得するために、コントロール パネルの文字反復の設定はすべて無視する。すなわち、キーストロークは、キーが押下されている時間の長短に関係なく、1 度しかカウントされないということになる。
配列中の要素がどのキーを指すかは、DIDEVICEOBJECTDATA 型の lOfs メンバを、CONST_DIKEYFLAGS 列挙内の定数と比較することで確認できる (「キーボード データの解釈」も参照すること)。
キーの状態変化データは、DIDEVICEOBJECTDATA 型の lData メンバに格納されている。意味を持つのは、lData の下位バイトのみである。下位バイトの上位ビットは、キーが押下されたときに設定され、キーが離されたときに消去される。言い換えれば、(lData And &H80) がゼロでないとき、キーが押されていることになる。