Einzelnen Beitrag anzeigen

godlike

Registriert seit: 11. Feb 2007
12 Beiträge
 
#1

TForm.OnKeyPress auf gleichzeitig gedrückte Keys reagieren?

  Alt 14. Jun 2008, 17:56
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;
  Mit Zitat antworten Zitat