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
