Platform SDK: DirectX

ステップ 2 : ジョイスティック能力の取得

[C++]

ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「DirectInput C/C++ チュートリアル」を参照すること。

[Visual Basic]

デバイス上のボタン、軸、および視点コントローラについての情報を取得するには、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)

次項 : ステップ 3 : ジョイスティック プロパティの設定