Ich habe, nachdem meine XBox aufgegeben hat, den Controller an meinem Windows-Rechner. Das Ganze ist nun ein "Joystick" mit 5 Achsen und 10 Tasten geworden. Leider ist der eingebaute "Support" von PB mehr als mangelhaft, da er nur die ersten zwei Achsen erkennt und nur digitalen Output liefert.
Gibt es eine Möglichkeit, die Funktionsfähigkeit des Joysticks unter PB voll zu nutzen? Ich habe bereits nach "joystick analog" gesucht, aber alles, was ich gefunden habe ist mehrere Jahre alt und funktioniert entweder (als Code) mit der aktuellen Version nicht mehr oder ist (als Download) lange nicht mehr verfügbar.
Ich hoffe, dass mir jemand ein wenig aushelfen kann, dieses Problem zu lösen. Ich habe in etwa folgende Vorstellung:
JoystickGetName(#Joystick) - Rückgabe Text, Name wie in Systemsteuerung
JoystickGetNumAxis(#Joystick) - Rückgabe Integer, Zahl der vorhandenen Achsen für gewählten Joystick
JoystickGetNumButtons(#Joystick) - wie gehabt, nur für Zahl der Buttons
JoystickGetAxis(#Joystick, #Axis[0..n]) - Rückgabe float.
JoystickButton(), ExamineJoystick() und InitJoystick() entsprechen den Bedürfnissen.
Aktuell habe ich diesen Code für ein Test-Programm, mit "Bordmitteln":
Code: Alles auswählen
;Code Sample for Joystick "Xbox 360 Controller"
MainWindow = OpenWindow(#PB_Any, 0, 0, 255, 85, "Joystick Test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
AxisX = ProgressBarGadget(#PB_Any, 5, 5, 245, 20, -50, 50)
AxisY = ProgressBarGadget(#PB_Any, 5, 30, 245, 20, -50, 50)
Button0 = ButtonGadget(#PB_Any, 5, 60, 20, 20, "A", #PB_Button_Toggle)
Button1 = ButtonGadget(#PB_Any, 30, 60, 20, 20, "B", #PB_Button_Toggle)
Button2 = ButtonGadget(#PB_Any, 55, 60, 20, 20, "X", #PB_Button_Toggle)
Button3 = ButtonGadget(#PB_Any, 80, 60, 20, 20, "Y", #PB_Button_Toggle)
Button4 = ButtonGadget(#PB_Any, 105, 60, 20, 20, "LB", #PB_Button_Toggle)
Button5 = ButtonGadget(#PB_Any, 130, 60, 20, 20, "RB", #PB_Button_Toggle)
Button6 = ButtonGadget(#PB_Any, 155, 60, 20, 20, "BK", #PB_Button_Toggle)
Button7 = ButtonGadget(#PB_Any, 180, 60, 20, 20, "ST", #PB_Button_Toggle)
Button8 = ButtonGadget(#PB_Any, 205, 60, 20, 20, "L", #PB_Button_Toggle)
Button9 = ButtonGadget(#PB_Any, 230, 60, 20, 20, "R", #PB_Button_Toggle)
GadgetToolTip(Button4, "Left Bank")
GadgetToolTip(Button5, "Right Bank")
GadgetToolTip(Button6, "Back")
GadgetToolTip(Button7, "Start")
GadgetToolTip(Button8, "Left Joystick Press")
GadgetToolTip(Button9, "Right Joystick Press")
InitJoystick()
For i = -50 To 50
SetGadgetState(AxisX, i)
SetGadgetState(AxisY, i)
WaitWindowEvent()
Next
SetGadgetState(AxisX, 0)
SetGadgetState(AxisY, 0)
WaitWindowEvent()
Repeat
ExamineJoystick(0)
;Achsen
OldX = NewX
OldY = NewY
;10 buttons
Old0 = New0
Old1 = New1
Old2 = New2
Old3 = New3
Old4 = New4
Old5 = New5
Old6 = New6
Old7 = New7
Old8 = New8
Old9 = New9
;Änderungen
NewX = JoystickAxisX(0)
NewY = JoystickAxisY(0)
New0 = JoystickButton(0, 1)
New1 = JoystickButton(0, 2)
New2 = JoystickButton(0, 3)
New3 = JoystickButton(0, 4)
New4 = JoystickButton(0, 5)
New5 = JoystickButton(0, 6)
New6 = JoystickButton(0, 7)
New7 = JoystickButton(0, 8)
New8 = JoystickButton(0, 9)
New9 = JoystickButton(0, 10)
;Bei Unterschieden Gadgets ändern
If OldX <> NewX
SetGadgetState(AxisX, JoystickAxisX(0)*50)
EndIf
If OldY <> NewY
SetGadgetState(AxisY, JoystickAxisY(0)*50)
EndIf
If Old0 <> New0
SetGadgetState(Button0, New0)
EndIf
If Old1 <> New1
SetGadgetState(Button1, New1)
EndIf
If Old2 <> New2
SetGadgetState(Button2, New2)
EndIf
If Old3 <> New3
SetGadgetState(Button3, New3)
EndIf
If Old4 <> New4
SetGadgetState(Button4, New4)
EndIf
If Old5 <> New5
SetGadgetState(Button5, New5)
EndIf
If Old6 <> New6
SetGadgetState(Button6, New6)
EndIf
If Old7 <> New7
SetGadgetState(Button7, New7)
EndIf
If Old8 <> New8
SetGadgetState(Button8, New8)
EndIf
If Old9 <> New9
SetGadgetState(Button9, New9)
EndIf
Until WaitWindowEvent(100) = #PB_Event_CloseWindow
End