none
ForceFeedback GamePad RRS feed

  • Frage

  • Guten Tag,
    Ich habe mir ein Programm geschrieben das ein Gamepad auslesen kann.
    Das funktioniert soweit auch ganz gut.
    Jetzt würde ich aber auch gerne die Vibrationsfunktion des Gamepads nutzen.
    Habe es schon mit :
    GamePad.SendForceFeedbackCommand(Microsoft.DirectX.DirectInput.ForceFeedbackCommand.SetActuatorsOn)
    versucht jedoch ohne erfolg.

    Bekomme dann immer die Fehlermeldung :
    "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt!"

    Hir einmal der Quellcode des Programms:
    Imports System
    Imports System.Windows.Forms
    Imports Microsoft.DirectX.DirectInput
    Imports Microsoft.DirectX
    
    Public Class Form1
    
        Private applicationDevice As Device = Nothing
        Public Shared state As New JoystickState
    
        Public Function InitDirectInput() As Boolean 
            Dim instance As DeviceInstance
            For Each instance In Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)
                applicationDevice = New Device(instance.InstanceGuid)
                Exit For
            Next instance
    
            applicationDevice.SetDataFormat(DeviceDataFormat.Joystick)
            applicationDevice.SetCooperativeLevel(Me, CooperativeLevelFlags.Exclusive Or CooperativeLevelFlags.Foreground)
            Dim d As DeviceObjectInstance
            For Each d In applicationDevice.Objects
                If 0 <> (d.ObjectId And CInt(DeviceObjectTypeFlags.Axis)) Then
                    applicationDevice.Properties.SetRange(ParameterHow.ById, d.ObjectId, New InputRange(-50, +50)) 
                End If
            Next d
            Return True
        End Function
    
        Public Sub GetData()
            If Nothing Is applicationDevice Then
                Return
            End If
            Try
                applicationDevice.Poll()
            Catch inputex As InputException
                If TypeOf inputex Is NotAcquiredException Or TypeOf inputex Is InputLostException Then
                    Try
                        applicationDevice.Acquire()
                    Catch
                        Return
                    End Try
                End If
            End Try
            Try
                state = applicationDevice.CurrentJoystickState 
    
            Catch
                Return
            End Try
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            InitDirectInput()
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            GetData()                                               'Joystick Position erfassen
    
            Label1.Text = "Joystick: LX = " + state.X.ToString() _
            & vbCrLf & " LY = " + state.Y.ToString _
            & vbCrLf & " RX = " + state.Rz.ToString _
            & vbCrLf & " RY = " + state.Z.ToString                  ' Anzeigen der Sticks
    
            Label2.Text = "Knöpfe : " _
            & vbCrLf & state.GetButtons(1) _
            & vbCrLf & state.GetButtons(2) _
            & vbCrLf & state.GetButtons(3) _
            & vbCrLf & state.GetButtons(4) _
            & vbCrLf & state.GetButtons(5) _
            & vbCrLf & state.GetButtons(6) _
            & vbCrLf & state.GetButtons(7) _
            & vbCrLf & state.GetButtons(8) _
            & vbCrLf & state.GetButtons(9) _
            & vbCrLf & state.GetButtons(10) _
            & vbCrLf & state.GetButtons(11) _
            & vbCrLf & state.GetButtons(12) _
            & vbCrLf & state.GetButtons(13) _
            & vbCrLf & state.GetButtons(14) _
            & vbCrLf & state.GetButtons(15) _
            & vbCrLf & state.GetButtons(16)                           ' Ausgabe der Tasten
          
    
            applicationDevice.SendForceFeedbackCommand(Microsoft.DirectX.DirectInput.ForceFeedbackCommand.SetActuatorsOn)
        End Sub
    End Class
    
    
    Wäre super wenn mir da jemand weiterhelfen könne.

    Gruß Dennis


    Montag, 19. Oktober 2009 21:14

Antworten

Alle Antworten