Platform SDK: DirectX |
ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「DirectInput C/C++ チュートリアル」を参照すること。
デバイス上のボタン、軸、および視点コントローラについての情報を取得するには、DirectInputDevice.GetCapabilities を呼び出すだけでよい。
Dim joyCaps As DIDEVCAPS Call diDev.GetCapabilities joyCaps
Joystick サンプルが知る必要があるのは、デバイス上のボタンと視点コントローラの数のみである。DIDEVCAPS 型は、デバイス上の軸の数も報告するが、軸の状態については一切情報を公開しない。この情報を知るために、サンプルは IdentifyAxes プロシージャを呼び出す。
Sub IdentifyAxes(diDev As DirectInputDevice) Dim didoEnum As DirectInputEnumDeviceObjects Dim dido As DirectInputDeviceObjectInstance Dim i As Integer For i = 1 To 8 AxisPresent(i) = False Next
いくつかの変数を宣言し、AxisPresent 配列 (各軸に対するブール型変数を格納する) を消去してから、プロシージャはすべてのデバイス オブジェクトの列挙に進む。
Set didoEnum = diDev.GetDeviceObjectsEnum(DIDFT_AXIS)
次に、DirectInputDevice.SetCommonDataFormat の呼び出しで以前に設定されたデータ形式の中で、そのオフセットごとに DirectInputDeviceObjectInstance を問い合わせる。このオフセットにより、軸の従来の役割やタイプが識別される。たとえば、DIJOFS_RZ 軸は、メイン スティックのひねり動作に対応することがわかる。ただし、デバイス ドライバは、軸に対して自由に指示を割り当てることができる。ユーザーがアプリケーション内で軸とアクションの対応を変更できるようにしておくのは良いアイデアである。
For i = 1 To didoEnum.GetCount Set dido = didoEnum.GetItem(i) Select Case dido.GetOfs Case DIJOFS_X AxisPresent(1) = True Case DIJOFS_Y AxisPresent(2) = True ' 以下同様。 . . . End Select Next End Sub
次に、アプリケーションは、以前に作成されたイベント ハンドルをデバイスに渡す。これにより、入力イベントが発生すると、通知はフォームに送信される。
Call diDev.SetEventNotification(EventHandle)