![]() |
was wenn zwei tasten gleichzeitig im FormKeyDown?
Hallo,
Ich programmiere gerade ein Spiel in der ich mit den Pfeiltasten ein Raumschiff bewegen kann und mit der Leertaste schiße. So in etwa:
Delphi-Quellcode:
Solange ich immer nur eine Taste gedrück halte funktioniert alles super...
// Bewegen
if (key=VK_UP) and (img_schiff.top>20) then img_schiff.Top:=img_schiff.Top-3; if (key=VK_DOWN) and (img_schiff.top<600) then img_schiff.Top:=img_schiff.Top+3; if (key=VK_LEFT) and (img_schiff.left>20) then img_schiff.Left:=img_schiff.Left-3; if (key=VK_RIGHT) and (img_schiff.left<950) then img_schiff.Left:=img_schiff.Left+3; // Schiessen if (key=VK_SPACE) then new_schuss; aber wenn ich vorwärtsfahren und schiessen gleichzeitig will, also die Tasten VK_LEFT und VK_SPACE gleichzeitig gedrückt habe dann schießt er entweder oder fährt. Was muss ich machen damit, wenn ich VK_LEFT und VK_SPACE gleichzeitig drücke, das beide Erreignisse, also new_schuss und img_schiff.Left:=img_schiff.Left-3 ausgelößt werden? Danke, Ferby |
Re: was wenn zwei tasten gleichzeitig im FormKeyDown?
Eine Lösung mit OnKeyDown kann ich dir leider nicht anbieten,
aber eine mit ![]() du einen Timer (am besten mit niedrigem Interval ;-)), die Timer-Prozedur müsste dann so aussehen:
Delphi-Quellcode:
Hoffe, dass ich helfen konnte,
procedure TForm1.Timer1Timer(Sender: TObject);
begin if(GetAsyncKeyState(VK_LEFT) <> 0) then Move_Left; if(GetAsyncKeyState(VK_RIGHT) <> 0) then //... end; idontwantaname :hi: |
Re: was wenn zwei tasten gleichzeitig im FormKeyDown?
Ich kann dafür eine mit OnKeyDown anbieten.
Du hast OnKeyDown und OnKeyUp beim Down machst dus z.B. so, dass beim OnKeyDown irgendeine Boolsche Variable, je nach Taste(spontan fällt mir da ein Array[Word] of Boolean ein, aber das wird nicht sehr schnell ;-) ), auf True gesetzt wird und beim Up auf False. Du kannst dann überprüfen, welche Tasten gedrückt sind, indem du einfach die Werte der Variablen abfragst. |
Re: was wenn zwei tasten gleichzeitig im FormKeyDown?
Warum will ich eigentlich einen Timer verwenden, wenn man das eigentlich auch ins OnKeyDown setzen kann ?? :wall:
So geht es ja auch ;)
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if(GetAsyncKeyState(VK_RIGHT) <> 0) then Button1.Left := Button1.Left + 1; if(GetAsyncKeyState(VK_SPACE) <> 0) then Button1.Caption := IntToStr(StrToIntDef(Button1.Caption, 0)+1); end; |
Re: was wenn zwei tasten gleichzeitig im FormKeyDown?
Hallo,
das mit den TImer funktioniert nicht da die geschwindigkeit der Figur von den Hintergrundrocessen abhängig ist. Diese Methode:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if(GetAsyncKeyState(VK_RIGHT) <> 0) then Button1.Left := Button1.Left + 1; if(GetAsyncKeyState(VK_SPACE) <> 0) then Button1.Caption := IntToStr(StrToIntDef(Button1.Caption, 0)+1); end; funktioniert auch nicht ganz so wie ich mir das vorstelle. Ich kann zwar in 2 richtungen gleichzeitgi fahren aber wenn ich z.b die linkpfeiltaste gedrück halte und einmal die Leertaste drücke und wieder loslasse dann bewegt sich das schiff nicht mehr, obwohl ich ja noch die linke pfeiltaste gedrückt halte. Kann mir da wer weiter helfen? mfg, Ferby |
Re: was wenn zwei tasten gleichzeitig im FormKeyDown?
Kannst es ja mal mit GetKeyboardState versuchen. Also irgendwie so:
Delphi-Quellcode:
var
keys: array[0..255] of Byte; begin GetKeyboardState(@keys); if Boolean(keys[VK_RIGHT]) then .... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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 by Thomas Breitkreuz