Microsoft DirectX 8.0 (Visual Basic)

ポーリングとイベント通知

入力データが発生しているかどうかを確認するには、ポーリングとイベント通知という 2 つの方法がある。

デバイスのポーリングとは、デバイス オブジェクトの現在の状態を定期的に取得すること、またはイベント バッファの内容をチェックすることを意味する。ポーリングが使用されるのは通常、決してアイドルになることがなく、常にゲームの世界を更新、レンダリングするリアルタイム ゲームである。

ポーリング

Microsoft® Visual Basic® アプリケーションでは、ポーリングは通常、Sub Main プロシージャ内で行われる。

ジョイスティックやほかのゲームデバイス、またはこれらのデバイス上のオブジェクトのうちいくつかは、DirectInputDevice8.Poll メソッドを呼び出すまで、ハードウェア割り込みを生成せず、いかなるデータも返さず、いかなるイベントも送信しない (このようなバックグラウンドでのポーリングを、ここで説明するアプリケーション ポーリングと混同しないこと。Poll メソッドは、データを一切取得しないが、データを使用可能にすることがある)。

データを取得しようとするたびに Poll メソッドを呼び出す必要があるかどうかを調べるには、まずデバイスのデータ形式を設定し、次に DirectInputDevice8.GetCapabilities メソッドを呼び出して、DIDEVCAPS 型の DIDC_POLLEDDATAFORMAT フラグをチェックする。

DIDC_POLLEDDATAFORMAT フラグと DIDC_POLLEDDEVICE フラグを混同しないこと。後者は、デバイス上のオブジェクトのどれかがポーリングを必要としているときに設定されるフラグである。次に、DirectInputDevice8.GetObjectInfo メソッドを呼び出して DirectInputDeviceObjectInstance オブジェクトを取得し、DirectInputDeviceObjectInstance.GetFlags により返される値中の DIDOI_POLLED フラグをチェックすると、ポーリングを必要としているのが特定のオブジェクトであるかどうかを見分けることができる。

DIDC_POLLEDDEVICE フラグはデバイスの最悪の状態を表すのであって、デバイスの実際の状態を表すわけではない。たとえば、ソフトウェア解像度調節付きの HID マウスでは、解像度情報を読み取るためにポーリングを要求するので、DIDC_POLLEDDEVICE フラグが設定される。デバイスの標準ボタンと軸データだけを取得したい場合は、このような条件のもとでデバイスをポーリングする必要はない。ただし、任意の入力デバイスに対して Poll メソッドを読み出しても害はない。この呼び出しが不要なときは、何のエフェクトも持たずにすぐに終了する。

イベント通知

イベント通知は、ScrawlB サンプルのように、何もしないで入力を待つようなアプリケーションに適している。

イベント通知を使用するには、データを取得するフォームまたはモジュールに DirectXEvent8 を実装する。次に、DirectX8.CreateEvent を使ってイベント ハンドルを作成し、このハンドルを DirectInputDevice8.SetEventNotification に渡す。これで、デバイスで入力イベントが発生すると必ず DirectXEvent8.DXCallback メソッドが呼び出され、Sub Main 内と同様に、このメソッドの実装内で、デバイスの状態またはバッファリング データのどちらかを取得できる。