Microsoft DirectX 8.0 (Visual Basic) |
Microsoft® DirectInput® は、バッファリング データと直接データの 2 種類のデータを供給する。バッファリング データは、アプリケーションが取得するまで格納されているイベントのレコードである。直接データは、デバイスの現在の状態のスナップショットである。
直接データは、デバイスの現在の状態だけに関心のあるアプリケーションで使用することが考えられる。たとえば、ジョイスティックの現在位置と、1 つ以上のボタンの状態に反応するフライト コンバット シミュレーションなどである。バッファリング データは、状態よりもイベントを重要視する場合に選択するとよい。たとえば、マウスの動きやボタンのクリックに反応するアプリケーションなどである。両方のタイプのデータを使用することもできる。たとえば、ジョイスティック軸では直接データを取得して、ボタンではバッファリング データを取得する場合などである。
注 : アクション マッピングを使用する場合、バッッファリング データ パケットには入力に関するアプリケーション定義データが含まれるため、バッファリング データを取得する必要がある。バッファリング データ パケットでは状態ではなくイベントが報告されるため、このデータを取得するには絶対軸の位置を追跡しなければならない。
アプリケーションは、以下のメソッドのいずれかを呼び出すことで、直接データを取得する。
名前が表すとおり、これらのメソッドはデバイスの現在の状態を返す。たとえば、各ボタンがアップ状態か、ダウン状態か、などである。このメソッドは、現在の状態と以前の状態を比較して得られる暗黙の情報を除いて、最後の呼び出し以降にデバイスに起きたイベントに関するデータは、まったく提供しない。たとえば、前回の呼び出し以降にユーザーがボタンを押して離した場合、今回の呼び出しではそれらの入力情報はアプリケーションには伝えられない。他方、ボタンを押したままにすると、メソッドは、ユーザーがボタンを離すまで「ボタン ダウン」を報告し続ける。
このデバイス状態の報告は、Click や Keydown のような一度限りのイベントによる Microsoft Visual Basic® のイベント報告とは異なっている。GetDeviceState メソッドのいずれかを使用してデバイスをポーリングする場合には、ボタン クリック、ダブルクリック、または単一のキー ストロークの区別をプログラムで判断しなければならず、また、アプリケーションがボタン ダウン状態またはキー ダウン状態に対し、不適切なタイミングで応答し続けることのないように適切に処理しなければならない。
バッファリング データの場合、イベントは、プログラムが処理を開始できる状態になるまで格納されている。ボタンやキーが押されたり、軸が移動されたりするたびに、そのイベントに対する情報がバッファ中の DIDEVICEOBJECTDATA 型に置かれる。アプリケーションがバッファを読み取るには、DirectInputDevice8.GetDeviceData を呼び出す。一度に任意の数の項目を読み出すことができる。
項目を読み出すと、通常は、バッファからその項目が消去されるが、DIGDD_PEEK フラグを設定すると、削除せずに取得することも選択できる。
バッファリング データを取得するには、まず DirectInputDevice8.SetProperty メソッドでバッファ サイズを設定する必要がある (「デバイス プロパティ」を参照すること)。バッファ サイズの設定は、デバイスを最初に取得する前に行う。効率上の理由から、デフォルトのバッファ サイズはゼロである。この値を変更しない限り、バッファリング データを取得することはできない。バッファ サイズはバイト単位ではなく、デバイスのタイプに対応したデータの項目単位でカウントされる。
GetDeviceData の戻り値は、バッファから取得された項目数を示している。バッファがオーバーフローした場合、データは返されず、GetDeviceData はエラーを発生する。このエラーにより、アプリケーションが捕捉される。
注 : アナログ ジョイスティックなど、割り込みを生成しないデバイスの場合、DirectInputDevice8.Poll メソッドを呼び出すまで、DirectInput はいかなるデータも取得しない。詳細については、「ポーリングとイベント通知」を参照すること。
参照