Platform SDK: DirectX

ステップ 1 : ジョイスティックの列挙と作成

[C++]

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

[Visual Basic]

システム キーボードやシステム マウスがあるということと同じ意味での、システム ジョイスティックというものはないので、ジョイスティックの DirectInputDevice オブジェクトを作成するには、まずインスタンス GUID (グローバル ユニーク識別子) を取得する必要がある。通常、これは利用可能なジョイスティックを列挙し、ユーザーに選択肢を提示して、選択されたデバイスの情報を取得することにより実現される。

次の関数は、DirectInput を初期化し、アタッチされているジョイスティックを列挙する。

Dim dx As New DirectX7
Dim di As DirectInput
Dim diDev As DirectInputDevice
Dim diDevEnum As DirectInputEnumDevices
 
Sub InitDirectInput()
    On Error GoTo Error_Out
    
    Set di = dx.DirectInputCreate()
    Set diDevEnum = di.GetDIEnumDevices( _
            DIDEVTYPE_JOYSTICK, DIEDFL_ATTACHEDONLY)
    If diDevEnum.GetCount = 0 Then
        MsgBox "No joystick attached."
        Unload Me
    End If
    
    'アタッチされているジョイスティックをリストボックスに追加する。
    Dim i As Integer
    For i = 1 To diDevEnum.GetCount
        Call lstJoySticks.AddItem( _
                diDevEnum.GetItem(i).GetInstanceName)
    Next
    
    ' イベント ハンドルを取得して、デバイスに関連付ける。
    EventHandle = dx.CreateEvent(Me)
    Exit Sub
    
Error_Out:
    MsgBox "Error initializing DirectInput."
    Unload Me
    
End Sub

ユーザーがリストからジョイスティックを選択すると、そのデバイスが作成され、lstJoySticks_Click プロシージャ内で初期化される。

Set diDev = di.CreateDevice(diDevEnum.GetItem( _
        lstJoySticks.ListIndex + 1).GetGuidInstance)
diDev.SetCommonDataFormat DIFORMAT_JOYSTICK
diDev.SetCooperativeLevel Me.hWnd, _
        DISCL_FOREGROUND Or DISCL_NONEXCLUSIVE

DirectInput.CreateDevice の呼び出しでは、列挙から取得された DirectInputDeviceInstance オブジェクトの GUID をパラメータとして受け取る。DirectX for Visual Basic におけるすべての列挙コレクションと同様に、デバイスの列挙は 1 から開始される。したがって、インデックスは、リスト ボックスで選択された項目のインデックスよりも 1 つ大きくなる。また、リスト ボックスはソートしない。

デバイス上のオブジェクトを列挙しようとしたり、プロパティを操作しようとしたりする前に、データ形式を設定する必要がある。

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