Alternative Joystick-Abfrage
Übersicht

BadDeathBetreff: Alternative Joystick-Abfrage |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab hier eine kleine Funktion für euch, die die Joystick-Befehle von BB nachmacht. Der Grund dafür war, dass die Blitz-eigenen Befehle dazu nur funktionieren, wenn das Fenster von Blitz auch aktiv ist, also den Fokus besitzt. Die 3 Achsen sind dabei ebenfalls im Bereich von -1.0 bis 1.0. Ist kein Joystick unter dem angegebenen Port angeschlossen, gibt die Funktion '0' zurück.
Code: [AUSKLAPPEN] ; Type zum Datenfüttern
Type JoyInfo Field tmp_X, tmp_Y, tmp_Z Field Buttons, tmp_Buttons Field X#, Y#, Z# End Type ; globale Instanz des Types, Zeit der letzten Aktualisierung und Array für bis zu 12 Buttons Global Joystick.JoyInfo = New JoyInfo, LastUpdateJoy, JoyStickDown[12] ; die eigentliche Funktion Function Joystick(Intervall = 10, Port = 0) ; nur nach vorgegebenen Intervall updaten If MilliSecs() - LastUpdateJoy >= Intervall Then ; Daten mit der API in den Type schreiben Ret = api_joyGetPos(Port, Joystick) ; wenn Daten empfangen wurden, folgt die Auswertung If Ret = 0 Then ; Koordinaten wie bei BB in den Bereich von -1.0 bis 1.0 Joystick\tmp_X = Joystick\tmp_X - 32767 Joystick\tmp_Z = Joystick\tmp_Z - 32767 Joystick\tmp_Y = Joystick\tmp_Y - 32767 ; bei mir trat hier ab und an eine Toleranz auf ^^ If Joystick\tmp_X = 1 Then Joystick\tmp_X = 0 If Joystick\tmp_Y = 1 Then Joystick\tmp_Y = 0 If Joystick\tmp_Z = 1 Then Joystick\tmp_Z = 0 Joystick\X = Float(Joystick\tmp_X) / 32767 Joystick\Y = Float(Joystick\tmp_Y) / 32767 Joystick\Z = Float(Joystick\tmp_Z) / 32767 If Joystick\X > 1 Then Joystick\X = 1 If Joystick\Y > 1 Then Joystick\Y = 1 If Joystick\Z > 1 Then Joystick\Z = 1 ; die Buttons werden in 2er-Potenzen angegeben und hier ausgewertet ; ist der Button gedrückt, ist der jeweilige Wert im Array '1' Joystick\tmp_Buttons = Joystick\Buttons For i = 11 To 0 Step -1 JoyStickDown[i+1] = 0 If Joystick\tmp_Buttons >= (1 Shl i) Then JoyStickDown[I+1] = 1 Joystick\tmp_Buttons = Joystick\tmp_Buttons - (1 Shl i) End If Next LastUpdateJoy = MilliSecs() Else ; kein Joystick angeschlossen Return 0 End If End If Return 1 End Function Hier noch ein kleines Beispiel: Code: [AUSKLAPPEN] Graphics 400,400,0,2
Type JoyInfo Field tmp_X, tmp_Y, tmp_Z Field Buttons, tmp_Buttons Field X#, Y#, Z# End Type Global Joystick.JoyInfo = New JoyInfo, LastUpdateJoy, JoyStickDown[12], Zeit While Not KeyHit(1) Cls Zeit = MilliSecs() If Joystick(100,0) = 0 Then If Joystick(100,1) = 0 Then RuntimeError "Kein Joystick angeschlossen!" End If End If Text 0,00, "X: " + Joystick\X Text 0,20, "Y: " + Joystick\Y Text 0,40, "Z: " + Joystick\Z Text 0,60, "Buttons: " + Joystick\Buttons For i = 1 To 12 Text 0,70+i*20, "Button " + i + ": " + JoyStickDown[i] Next Flip 0 Wend End ; Alternative Joystick-Abfrage Function Joystick(Intervall = 10, Port = 0) If Zeit - LastUpdateJoy >= Intervall Then Ret = api_joyGetPos(Port, Joystick) If Ret = 0 Then Joystick\tmp_X = Joystick\tmp_X - 32767 Joystick\tmp_Z = Joystick\tmp_Z - 32767 Joystick\tmp_Y = Joystick\tmp_Y - 32767 If Joystick\tmp_X = 1 Then Joystick\tmp_X = 0 If Joystick\tmp_Y = 1 Then Joystick\tmp_Y = 0 If Joystick\tmp_Z = 1 Then Joystick\tmp_Z = 0 Joystick\X = Float(Joystick\tmp_X) / 32767 Joystick\Y = Float(Joystick\tmp_Y) / 32767 Joystick\Z = Float(Joystick\tmp_Z) / 32767 If Joystick\X > 1 Then Joystick\X = 1 If Joystick\Y > 1 Then Joystick\Y = 1 If Joystick\Z > 1 Then Joystick\Z = 1 Joystick\tmp_Buttons = Joystick\Buttons For i = 11 To 0 Step -1 JoyStickDown[i+1] = 0 If Joystick\tmp_Buttons >= (1 Shl i) Then JoyStickDown[I+1] = 1 Joystick\tmp_Buttons = Joystick\tmp_Buttons - (1 Shl i) End If Next LastUpdateJoy = Zeit Else Return 0 End If End If Return 1 End Function Und noch die Userlib: Code: [AUSKLAPPEN] .lib "WinMM.dll"
api_joyGetPos%(ID%, pji*) : "joyGetPos" Danke nochmal an Noobody bei der Hilfe zu den Buttons ![]() |
||
-~= real coders just code in binary =~- |
- Zuletzt bearbeitet von BadDeath am Di, Mai 12, 2009 22:53, insgesamt einmal bearbeitet
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auf die Gefahr hin, dass ich was Blödes sag:
Globale Var: Code: [AUSKLAPPEN] Global LastUpdate ;[...]
und in der Funktion: Code: [AUSKLAPPEN] If MilliSecs() - LastUpdateJoy >= Intervall Then
Fällt dir da was auf? LastUpdate<>LastUpdateJoy? |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich liebe dich!
genau das, was ich gesucht habe! Dankedankedanke XD MfG |
||
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eingeproggt hat Folgendes geschrieben: Auf die Gefahr hin, dass ich was Blödes sag:
Globale Var: Code: [AUSKLAPPEN] Global LastUpdate ;[...]
und in der Funktion: Code: [AUSKLAPPEN] If MilliSecs() - LastUpdateJoy >= Intervall Then
Fällt dir da was auf? LastUpdate<>LastUpdateJoy? Ganz im Gegenteil - es eher was Schlaues. Danke, hatte ich wohl übersehen, als ich ein paar Variablen umbennante, um es übersichtlicher zu gestalten. ![]() @ Nici: Freut mich, wenn ich helfen konnte! |
||
-~= real coders just code in binary =~- |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group