Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TForm.OnKeyPress auf gleichzeitig gedrückte Keys reagieren? (https://www.delphipraxis.net/115597-tform-onkeypress-auf-gleichzeitig-gedrueckte-keys-reagieren.html)

godlike 14. Jun 2008 16:56


TForm.OnKeyPress auf gleichzeitig gedrückte Keys reagieren?
 
Heyhey ihr,

ich bin grade daran ein kleines PingPong-Spiel zu erstellen mit ganz einfachen VCL-Komponenten (TForm, TShape).
Als Rackets habe ich die TShape-Komponente verwendet. Nun habe ich folgendes Problem:
Das Spiel sollte man 2-Spieler auf einer Tastatur spielen können (Netzwerk will ich vll auch iwann noch testen), allerdings greife ich ja über das OnKeyPress-Ereignis des Forms auf die gedrückten Tasten zu... nun hat Spieler 1 die Tasten w und s um das Racket nach oben/unten zu steuern und Spieler 2 hat NumPad8 und NumPad2... allerdings ist es jetzt so, jedes Mal wenn Spieler 1 das Racket am nach oben bewegen ist und Spieler 2 auch irgendwohin fahren will (sprich z.B. w und NumPad2 gleichzeitig gedrückt), dann fährt nur das Racket des Spielers, der zuletzt gedrückt hat. Also 'kicken' sich die Tastendrücke jeweils gegenseitig und somit ist's relativ schwer/mühsam zu spielen. ^^

Kann mir da jemand einen Tipp geben, wie ich es u.U. besser machen könnte oder was ich ändern muss?

Danke im Voraus.

Hier der Source-Code welcher die Rackets steuert:

Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if not (Racket1.Top <= 0) then
  begin
    if (Key = 'w') then
    begin
      Racket1.Top:= Racket1.Top -5;
    end;
  end;
  if not ((Racket1.Top + Racket1.Height) >= Form1.ClientHeight) then
  begin
    if (Key = 's') then
    begin
      Racket1.Top:= Racket1.Top +5;
    end;
  end;
  if not (Racket2.Top <= 0) then
  begin
    if (Ord(Key) = (VK_NUMPAD8 -48)) then
    begin
      Racket2.Top:= Racket2.Top -5;
    end;
  end;
  if not ((Racket2.Top + Racket2.Height) >= Form1.ClientHeight) then
  begin
    if (Ord(Key) = (VK_NUMPAD2 -48)) then
    begin
      Racket2.Top:= Racket2.Top +5;
    end;
  end;
end;

MSSSSM 14. Jun 2008 17:07

Re: TForm.OnKeyPress auf gleichzeitig gedrückte Keys reagier
 
hast du irgendwie eine schleife?
kannste vllt. mit GetAsyncKeyState was anfangen...
GetAsyncKeyState(Taste)
Taste= VK_irgendwas oder Ord('A') f+r A oder a,buchstaben GRO? schreiben!

mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz