Entwickler-Ecke
Multimedia / Grafik - DirectInput Gamepad-Button gedrückt wird zu oft ausgelöst
flaavia - Fr 26.12.03 13:07
Titel: DirectInput Gamepad-Button gedrückt wird zu oft ausgelöst
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
Christian S. - Fr 26.12.03 13:34
Hallo!
Bitte nutze Delphi- statt Code-Tags. Ich habe dies schon in mehreren Postings für Dich geändert. Denke bitte demnächst daran!
Grüße
Peter
flaavia - Fr 26.12.03 16:29
@ Peter LustiG: Sorry für die Tags, mir war (und ist eigentlich gar nicht klar warum dies wichtig ist :oops: ) aber ich werde es selbstverständlich tun. Nur, was ist denn dann mit Code-Tags gemeint?
Christian S. - Fr 26.12.03 16:34
Hallo!
Code-Tags sind für allgemeinen Code gedacht, also nicht speziell Delphi-Source. Dabei ist eigentlich der einzige Effekt, dass die Leerzeichen am Anfang von Zeilen nicht entfernt werden.
Delphi-Tags sind speziell auf Delphi-Sourcecode zugeschnitten und unterstützen Syntax-Highlighting. Und weshalb Delphi-Tags durchaus Sinn machen, zeigt schon unten stehendes Beispiel. Der Source wird viel besser lesbar!
mit Code-Tags:
Quelltext
1: 2: 3: 4: 5: 6:
| procedure meineProz; VAR i : Integer; begin Label1.Caption := 'Hallo'; for i:=1 TO 10 DO irgendwas; //Ein Kommentar end; |
mit Delphi-Tags:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure meineProz; VAR i : Integer; begin Label1.Caption := 'Hallo'; for i:=1 TO 10 DO irgendwas; end; |
Überzeugend, oder? :)
Grüße
Peter
flaavia - Sa 27.12.03 16:02
:shock: :autsch: :D
überzeugt
hat denn auch noch jemand eine idee zu meínem am Anfang genannten Problem :nixweiss: :?:
Dies müsste doch ein Problem sein, das öfter vorkommt und zu dem es Lösungsansätze gibt (die mir leider noch aus mangelnder langzeitprogramiererfahrung fehlen)
Für alle Tips vielen Dank im voraus
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!