Platform SDK: DirectX |
ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「DirectInput C/C++ チュートリアル」を参照すること。
フォース フィードバックを実装するには、まず、適切なデバイスが使用可能かどうかを調べ、使用可能であれば、そのデバイスに DirectInputDevice オブジェクトを作成しなければならない。ここで、x 軸と y 軸でエフェクトを再生できるデバイスが必要なアプリケーションを考えてみる。
次のサンプルは、DirectInput オブジェクトを作成し、それを使って DirectInputEnumDevices オブジェクト内の利用可能なデバイスを列挙することから開始する。すべてのフォース フィードバック デバイスは DIDEVTYPE_JOYSTICK 型なので、列挙対象はこの型のアタッチ済みデバイスに制限されている。
' dx は初期化済みのグローバル DirectX オブジェクト。 ' di は、グローバル DirectInput オブジェクト。 Dim diDevInst As DirectInputDeviceInstance 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.GetDIEnumDevices(DIDEVTYPE_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
ここで、サンプルは DirectInputEnumDeviceObjects コレクションに含まれるデバイス上の軸を列挙する。
Set diDevObjEnum = didev.GetDeviceObjectsEnum(DIDFT_AXIS) ForceX = False ForceY = False
次に、軸の中から x 軸と y 軸を探し、それらの軸がフォース フィードバック エフェクトをサポートするかどうかを調べる。
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 Next iAxes FoundForce = ForceX And ForceY if FoundForce Then Exit For End If Next i If Not FoundForce Then MsgBox "Two force feedback axes required." End