Microsoft DirectX 8.0 (Visual Basic)

ステップ 4 : ジョイスティックからの直接データの取得

この時点で、必要なプロパティは設定されており、デバイスは取得可能で、データはジョイスティックから収集可能である。Joystick サンプルでは、プロパティを設定した後のループ内でデバイスをポーリングしている。これには、DirectInputDevice8.Poll メソッドを使用する。実際のマルチメディア アプリケーションでは、ポーリングはメインのゲーム ループやレンダリング ループ内で行われる。

diDev.Acquire
 
While DoEvents
    diDev.Poll
Wend

サンプル アプリケーションは、実際にデバイスをポーリングするたびに直接データを取得しているわけではない。不要な画面更新をなくすために、ポーリングは通知に基づいて行われる。割り込みを生成しないデバイスにより通知が発行されていることを保証する唯一の方法は、Poll を呼び出すことである。ゲーム デバイス (HID など) によってはポーリングは必要ではないが、DirectInputDevice8.Poll を余分に呼び出すことは、Poll を呼び出す前にデバイスのフラグをチェックするのと同様に効率的である。

通知は DirectXEvent8.DXCallback メソッドの実装内で通常どおり処理される。このプロシージャが呼び出されるたびに、アプリケーションはジョイスティック イベントが発生したことを認識する。この時点で、DirectInputDevice8.GetDeviceData を呼び出して、待機中の軸の変化やボタン イベントを取得することもできる。ただし、ゲーム コントローラでは、デバイス全体の状態を取得するのが一般的である。したがってこのサンプルでは、コールバック関数から DirectInputDevice8.GetDeviceStateJoystick を呼び出して使用している。

Dim js As DIJOYSTATE
 
diDev.GetDeviceStateJoystick js

DIJOYSTATE 型の値には、ジョイスティック上のすべてのデバイス オブジェクトの状態が格納されている。「ステップ 2 : ジョイスティックの能力の取得」で、どのボタン、軸、視点コントローラが実際に存在するかを調べているので、型のどのメンバを無視するかも認識している。