![]() |
DXINPUT FRAGE
Wenn ich die Tastenabfrage mit
IF isleft in DXINPUT1.state then ..... dann kann ich die Taste gedrückt halten und das ereigniss wird immer ausgelöst! FRAGE: Nun will ich aber das für jeden Drück nur 1 Ereignis ausgelöst wird egal wie lang der Druck dauert! GIBT ES DAFÜR N BEFEHL? Selber machen ginge auch aber würde halt ZEIT und Mühe sparen! DANKE IM VORRAUS 11.11 ist VORBEI DIE FÜNFTE JAHRESZEIT HAT BEGONNEN :party: :cheers: |
Re: DXINPUT FRAGE
WIESO HAT DENN KEINER NE IDEE? IST GIBT DOCH MEHR ALS HUNDERT LEUTE IN DIESEM FORUM,DIE DIESES PROBLEM SCHON GELÖST HABEN!
|
Re: DXINPUT FRAGE
woher weisste denn das mit den 100 leuten?? wenn dem so wäre, würde darüber sicher was mit der suchfunktion zu finden sein oder nicht.
ich kann dir leider nicht helfen, aber die suche vielleicht! ciao haegar |
Re: DXINPUT FRAGE
@ATwardz
:warn: könntest du es mal sein lassen alles groß zu schreiben??? Deswegen wird dein Thread nicht eher gelesen! :warn: |
Re: DXINPUT FRAGE
Nochmalwas:
Wenn das schon über 100 Leute gelöst haben dann SUCH mal danach! |
Re: DXINPUT FRAGE
Direct input ist status orientiert (oder so) nicht ereignisorientiert :wink: ...Obwohl man auch irgendwelche callbacks registrieren kann, frag mich nicht wie. Der normalen weg wäre den status abzufragen, so wie du es machst. Ausserdem is das alles fieses altes DelphiX zeugs *schüttel* ...das kann das garantiert nicht. Aber es hält dich doch keiner davon ab einen work araond zu machen...mengen sind da sehr praktisch.
Wenn du nicht DelphiX benutzen würdest, hätte ich dir meine DirectInput unit überlassen. viel glück noch. cu, maximov. |
Re: DXINPUT FRAGE
Habe sicherlich gesucht! Gefand allerdings nichts, so stellte ich diese Frage!
Es gibt sicherlich , vielleicht nicht Hundert aber genügend die dies realisiert haben! Was eigentlich auch mehr eine ironische Übertreibung war! Ich dachte das die Antwort demnach leicht ist, nur ich sie nicht kenne! Ich wusste nicht das grossschreiben hier im Forum so geächtet wird , sorry! Was mich viel eher aufregt sind überflüssige Kommentare von Leuten die das Forum "zumüllen". Aber anstatt mich zu beratschlagen, hättest du Spider die Zeit ja auch nutzen können anderen Leuten zu helfen! Danke Maximov |
Re: DXINPUT FRAGE
Hallo
benutz doch einfach das OnKeyDown-Event der Form. Das wird beim Drücken der Taste einmal(!) ausgeführt. In dem Parameter "Key" wird die gedrückte Taste gespeichert. Dabei steht 37 für links 38 für oben 39 für rechts 40 für unten 13 für Enter 32 für Leertaste Ich denke, das sind die wichtigsten Taste. Das ganze könnte dann in etwa so aussehen:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if Key=37 then //Wurde Taste "Links" gedrückt? begin // Code für "Links" end; // usw... end; Grüße Seniman |
Re: DXINPUT FRAGE
Hö? - Ich dachte beim OnKeyDown Event könnte man auch auf der Taste bleiben und das wiederholt sich ständig ....
Und ist das dan nicht key = VK_Left wenn die pfeiltaste nach links abgefragt werden soll? |
Re: DXINPUT FRAGE
Aber genau dies geht nicht, das hatte ich auch schon versucht! Die onKeyDown Methoden von Form1 und DXDraw1 funkzen nit!
Bitt ein wenig ratlos! |
Re: DXINPUT FRAGE
Hast Du auch KeyPreview von Form1 auf True gestellt?
|
Re: DXINPUT FRAGE
Hallo,
ja es ist richtig. Wenn man eine Taste gedrückt hält, dann wird auch das OnKeyDown-Event wiederholt ausgeführt. Das ist aber anders als bei den DXInput.States. Beispiel: Ich halte die Taste "f" ein paar Sekunden fest: ffffffffffffffffffffffffff Nach dem ersten Tastendruck ist eine kleine Pause und dann kommen ganz viele "f"s. Bei jedem f würde jetzt das OnKeyDown-Event ausgeführt. Das hat allerdings nichts mit den Frames des Timers zu tun. In den meisten Fällen halte ich diese Umsetzung aber für ausreichend. Ansonsten eine neue Idee: Für jede Taste, um die es geht, eine Variable vom Typ boolean an. Für die Taste "Links" zum Beispiel:
Delphi-Quellcode:
Denn setzt du ganz an den Schluss der Timer-Prozedur folgendes:
var
Form1: TForm1; GedrLinks: Boolean; // usw... implementation
Delphi-Quellcode:
Nun kannst du irgendwo vorher in dieser Timer-Prozedur folgendes abfragen:
GedrLinks:= (isleft in Form1.DxInput1.States);
Delphi-Quellcode:
D.h. in dem vorherigen Frame darf die Taste nicht gedrückt gewesen sein, aber jetzt muss sie es.
if (not GedrLinks) and (isleft in Form1.DxInput1.States) then //Code
So sollte es klappen. Grüße Seniman |
Re: DXINPUT FRAGE
Zitat:
|
Re: DXINPUT FRAGE
Hmmmmm, ja,
ich danke euch für eure Vorschläge doch es ist leider nun mal nicht das was ich suche! Jeder kennt es, das legendäre "Spielhöllen-feeling", wo man wie ein Besessener auf die Tasten gehauen hat um zu schiessen! Jeder Druck, ein Schuss! So wollte ich es eigentlich auch machen, das der der die schnellere Hand hat einen Vorteil hat! Deswegen meinte ich auch das es bestimmt schon Hundert Leute gemacht heben, weil es halt zum Ursprung der Videospiele zählt! Ich bin mir bewusst , das ich mit einen extra Timer eine permanente Abfrage machen könnte! Ich wollte nur wissen und denke eigentlich das es irgendwo in diesem Delphiuniversum eine elegantere Lösung gibt! Danke an alle! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz