Microsoft DirectX 8.0 (Visual Basic)

ステップ 1 : フォース フィードバック デバイスの初期化

フォース フィードバックを実装するには、まず、適切なデバイスが使用可能かどうかを調べ、使用可能であれば、そのデバイスに DirectInputDevice8 オブジェクトを作成しなければならない。このチュートリアルでは、アプリケーションは x 軸と y 軸の両方でエフェクトを再生できるデバイスを必要としていると仮定する。

次のサンプルは、通常どおり、DirectInput8 オブジェクトを作成し、そのオブジェクトを使って、DirectInputEnumDevices8 オブジェクト内で利用可能なデバイスを列挙することから始まっている。列挙対象は、DI8DEVTYPE_JOYSTICK 型のアタッチ済みデバイスに制限されている。

Dim dx As DirectX8
Dim di As DirectInput8

Dim diDev As DirectInputDevice8
Dim diEnumDev As DirectInputEnumDevices8
Dim diDevInst As DirectInputDeviceInstance8
Dim diDevObjEnum As DirectInputEnumDeviceObjects
Dim devobj As DirectInputDeviceObjectInstance
 
Dim devcaps As DIDEVCAPS
Dim ForceX As Boolean, ForceY As Boolean
Dim FoundForce As Boolean
Dim efftype As Long
Dim strObjGuid As String
 
Dim i As Integer, iAxes As Integer

Set di = dx.DirectInputCreate
Set diEnumDev = di.GetDIDevices(DI8DEVTYPE_JOYSTICK, _
                                          DIEDFL_ATTACHEDONLY)

ここで、サンプルはフォース フィードバック能力を持つデバイスを見つけるまで、使用可能なデバイスの調査を補間する。

For i = 1 To diEnumDev.GetCount
    Set diDevInst = diEnumDev.GetItem(i)
    Set diDev = di.CreateDevice(diDevInst.GetGuidInstance)
    Call diDev.GetCapabilities(devcaps)
    If devcaps.lFlags And DIDC_FORCEFEEDBACK Then
    'フォース フィードバック デバイスを処理する。

次に、X 軸と Y 軸の両方がフォース フィードバックをサポートする必要があるため、デバイス上のすべての軸が DirectInputEnumDeviceObjects コレクションに列挙される。

    Set diDevObjEnum = didev.GetDeviceObjectsEnum(DIDFT_AXIS)
 

存在する軸のコレクションを調べ、x 軸と y 軸を探し、それらの軸がフォース フィードバック エフェクトをサポートするかどうかを調べる。

    ForceX = False
    ForceY = False
    For iAxes = 1 To diDevObjEnum.GetCount
        Set devobj = diDevObjEnum.GetItem(iAxes)
        strObjGuid = devobj.GetGuidType
        If strObjGuid = "GUID_XAxis" Then
            If devobj.GetFlags And DIDOI_FFACTUATOR Then
                ForceX = True
            End If
        ElseIf strObjGuid = "GUID_YAxis" Then
            If devobj.GetFlags And DIDOI_FFACTUATOR Then
                ForceY = True
            End If
        End If
        FoundForce = ForceX And ForceY
        If FoundForce Then Exit For
    Next iAxes

Next i    '次のデバイス。

If Not FoundForce Then
    MsgBox "Two force feedback axes required."
End If

適切なデバイスが確認できたら、「ステップ 2 : デバイスのプロパティの設定」でデバイスのプロパテイを設定する。