Ich versuche eine mit DirectX eine USB-Gamepad abfrage zu schreiben,
das Programm Funktioniert soweit, außer wenn ich den rechten analogstick
nach oben oder unten bewege passiert nichts.
Ich weiß das die Achsen X und Y für den Linken Analogstick stehen,
die Z und ZR für den Rechten Stick, Die ZR-Achse (Rechter Stick Links/Rechts)
gibt werte zurück, die Z-Achse (Rechter Stick Hoch/Runter) leider nicht.
Hat jemand eine Ahnung wo der Fehler ist?
Hier die ProjektMappeGamepad.7z
*Topic verschoben*
das Programm Funktioniert soweit, außer wenn ich den rechten analogstick
nach oben oder unten bewege passiert nichts.
Ich weiß das die Achsen X und Y für den Linken Analogstick stehen,
die Z und ZR für den Rechten Stick, Die ZR-Achse (Rechter Stick Links/Rechts)
gibt werte zurück, die Z-Achse (Rechter Stick Hoch/Runter) leider nicht.
Hat jemand eine Ahnung wo der Fehler ist?
Quellcode
- Imports Microsoft.DirectX.DirectInput
- Imports Microsoft.DirectX
- Imports Gamepad.Form1
- Public Class Form1
- Private Plekker As Gamepad
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Try : Plekker = New Gamepad(Me.Handle, -1000, 1000, -1000, 1000)
- Catch ex As Exception
- MsgBox(ex.Message)
- End Try
- End Sub
- Public Structure Buttons
- Dim K0 As Boolean
- Dim K1 As Boolean
- Dim K2 As Boolean
- Dim K3 As Boolean
- Dim K4 As Boolean
- Dim K5 As Boolean
- Dim K6 As Boolean
- Dim K7 As Boolean
- Dim K8 As Boolean
- Dim K9 As Boolean
- Dim K10 As Boolean
- Dim K11 As Boolean
- End Structure
- Public Structure Status
- Dim X_Achse As Integer
- Dim Y_Achse As Integer
- Dim Z_Achse As Integer
- Dim RZ_Achse As Integer
- Dim Knopf As Buttons
- End Structure
- Private Sub Poller_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Poller.Tick
- Try : Plekker.Pollen()
- Label1.Text = "X= " & Plekker.StatusStand.X_Achse.ToString
- Label2.Text = "Y= " & Plekker.StatusStand.Y_Achse.ToString
- Label3.Text = "RZ= " & Plekker.StatusStand.RZ_Achse.ToString
- Label4.Text = "Z= " & Plekker.StatusStand.Z_Achse.ToString
- If (Plekker.StatusStand.Knopf.K0 = True) Then
- C1.Checked = True
- Else : C1.Checked = False
- End If
- If (Plekker.StatusStand.Knopf.K1 = True) Then
- C2.Checked = True
- Else : C2.Checked = False
- End If
- If (Plekker.StatusStand.Knopf.K2 = True) Then
- C3.Checked = True
- Else : C3.Checked = False
- End If
- If (Plekker.StatusStand.Knopf.K3 = True) Then
- C4.Checked = True
- Else : C4.Checked = False
- End If
- If (Plekker.StatusStand.Knopf.K4 = True) Then
- C5.Checked = True
- Else : C5.Checked = False
- End If
- If (Plekker.StatusStand.Knopf.K5 = True) Then
- C6.Checked = True
- Else : C6.Checked = False
- End If
- If (Plekker.StatusStand.Knopf.K6 = True) Then
- C7.Checked = True
- Else : C7.Checked = False
- End If
- If (Plekker.StatusStand.Knopf.K7 = True) Then
- C8.Checked = True
- Else : C8.Checked = False
- End If
- If (Plekker.StatusStand.Knopf.K8 = True) Then
- C9.Checked = True
- Else : C9.Checked = False
- End If
- If (Plekker.StatusStand.Knopf.K9 = True) Then
- C10.Checked = True
- Else : C10.Checked = False
- End If
- If (Plekker.StatusStand.Knopf.K10 = True) Then
- C11.Checked = True
- Else : C11.Checked = False
- End If
- If (Plekker.StatusStand.Knopf.K11 = True) Then
- C12.Checked = True
- Else : C12.Checked = False
- End If
- Catch ex As Exception
- If MsgBox("Fehler beim Pollen", MsgBoxStyle.Critical) = MsgBoxResult.Ok Then
- Me.Close()
- End If : End Try
- End Sub
- End Class
- Public Class Gamepad
- Private Plekker_Status As Status
- Private Plekker_Instance As DeviceInstance
- Private Mein_Plekker As Device = Nothing
- Private Pad As JoystickState
- Public Sub New(ByVal hwnd As System.IntPtr, ByVal rangeMin As Integer, ByVal rangeMax As Integer, ByVal rangeMinZ As Integer, ByVal rangeMaxZ As Integer)
- Pad = New JoystickState()
- For Each Me.Plekker_Instance In Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)
- Mein_Plekker = New Device(Plekker_Instance.InstanceGuid)
- Exit For
- Next Plekker_Instance
- Mein_Plekker.SetDataFormat(DeviceDataFormat.Joystick)
- Mein_Plekker.SetCooperativeLevel(hwnd, CooperativeLevelFlags.Exclusive Or CooperativeLevelFlags.Foreground)
- Dim DOI As DeviceObjectInstance
- For Each DOI In Mein_Plekker.Objects
- If 0 <> (DOI.ObjectId And CInt(DeviceObjectTypeFlags.Axis)) Then
- Mein_Plekker.Properties.SetRange(ParameterHow.ById, DOI.ObjectId, New InputRange(rangeMin, rangeMax))
- If (DOI.Name Like "Z-Achse") Then
- Mein_Plekker.Properties.SetRange(ParameterHow.ById, DOI.ObjectId, New InputRange(rangeMinZ, rangeMaxZ))
- End If : End If
- Next DOI
- End Sub
- Public ReadOnly Property StatusStand As Status
- Get
- Return Plekker_Status
- End Get
- End Property
- Public Sub Pollen()
- Try : Mein_Plekker.Poll()
- Catch InpLose As InputException
- If TypeOf InpLose Is NotAcquiredException Or TypeOf InpLose Is InputLostException Then
- Try : Mein_Plekker.Acquire()
- Catch
- Return
- End Try : End If : End Try
- Try : Pad = Mein_Plekker.CurrentJoystickState
- Catch
- Return
- End Try
- With Plekker_Status
- .X_Achse = Pad.X
- .Y_Achse = Pad.Y
- .Z_Achse = Pad.Z
- .RZ_Achse = Pad.Rz
- .Knopf.K0 = Stand(Pad.GetButtons.ElementAt(0))
- .Knopf.K1 = Stand(Pad.GetButtons.ElementAt(1))
- .Knopf.K2 = Stand(Pad.GetButtons.ElementAt(2))
- .Knopf.K3 = Stand(Pad.GetButtons.ElementAt(3))
- .Knopf.K4 = Stand(Pad.GetButtons.ElementAt(4))
- .Knopf.K5 = Stand(Pad.GetButtons.ElementAt(5))
- .Knopf.K6 = Stand(Pad.GetButtons.ElementAt(6))
- .Knopf.K7 = Stand(Pad.GetButtons.ElementAt(7))
- .Knopf.K8 = Stand(Pad.GetButtons.ElementAt(8))
- .Knopf.K9 = Stand(Pad.GetButtons.ElementAt(9))
- .Knopf.K10 = Stand(Pad.GetButtons.ElementAt(10))
- .Knopf.K11 = Stand(Pad.GetButtons.ElementAt(11))
- End With
- End Sub
- Private Function Stand(ByVal Gedrueckt As Byte) As Boolean
- If (Gedrueckt > 0) Then
- Return True
- Else
- Return False
- End If
- End Function
- End Class
Hier die ProjektMappeGamepad.7z
*Topic verschoben*
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()