Microsoft DirectX 8.0 (Visual Basic) |
フォース フィードバックを実装するには、まず、適切なデバイスが使用可能かどうかを調べ、使用可能であれば、そのデバイスに 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 : デバイスのプロパティの設定」でデバイスのプロパテイを設定する。