Hallo
Nachdem ich jetzt DirectInput endlich zum laufen gebracht habe, habe ich jetzt noch ein Problem mit der Tatsache, das das Drücken der Gamepad-Buttons entweder leicht verzögert (ca 1 sec) registriert wird (und die daran geknüpfte Aktion dann bei nur ganz kurzem Drücken des Buttons nicht gestartet wird) oder das Button-Gedrückt Ereignis gleich mehrfach ausgelöst wird (weil ich eben den Button länger drücken muss, damit überhaupt das ButtonGedrückt-Ereigniss registriert wird) und damit das Program auch nicht richtig läuft (Die auszulösende Aktion wird eben mehrfach gestartet, obwohl dies nur einmal bei Knopfdruck der Fall sein sollte.
Ich habe die GamePad-Buttongedrückt-Ereigniss-Abfrage folgendermaßen umgesetzt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TfoMain.btDirectInputStartClick(Sender: TObject); var diJoyState: TDIJoyState; begin
DIDJoystick.Acquire;
Aborted:=False; repeat Application.ProcessMessages; DIDJoystick.Poll; DIDJoystick.GetDeviceState(SizeOf(diJoyState), @diJoyState);
if ((diJoyState.rgbButtons[0]>0) and (foMain.Active = True) and ...) then btXYZ.Click; if ((diJoyState.rgbButtons[1]>0) and...
until (GetKeyState(VK_ESCAPE) and 128>0) or Aborted; end; |
Das ganze mit einem Timer abzufragen würde die Situation auch nicht ändern.
Ich würde mich sehr über Tips freuen, wie man dieses Problem prizipiell angeht (Der gedrückte Gamepad-Button soll das Ereigniss nur einmal auslösen, erst wenn er ein zweitesmal gedrückt wird, also nach loslassen und neu drücken, sollte das Ereigniss erneut ausgelöst werden).
Kann man auch etwas gegen die variable Zeit (bis zu 1/2 bis 1 Sek) unternehmen, bis das gedrückt-Ereignis registriert wird, so daß man den GamepadButton nicht dauernd gedrückt halten mus, bis man merkt, das der "Computer dies mitbekommen hat"
Viele Dank für alle Tips
Moderiert von
Peter Lustig: Code- durch Delphi-Tags ersetzt