Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Steuerung zweier Spieler über die Tastatur (https://www.delphipraxis.net/133843-steuerung-zweier-spieler-ueber-die-tastatur.html)

BoriS. 10. Mai 2009 16:29


Steuerung zweier Spieler über die Tastatur
 
Hallo :)

Ich arbeite mich derzeit in die Andorra2D Library ein und programmiere deshalb einen Clone des schon oft vergewaltigten Spiels "PONG". ;)

Das Spiel besitzt keine KI - man kann allerdings gegen einen Freund/Feind spielen.
Gesteuert wird das ganze über die Tastatur. Spieler 1 nutzt die Tasten "O" und "L", Spieler 2 "W" und "S".
Dadurch entsteht beim Spielen je doch das Problem, dass sich die Spieler gegenseitig stören.
Dies passiert, wenn z.B. Spieler 1 gerade sein Paddle nach ganz oben bewegen möchte und dazu die Taste "O" gedrückt hält.
Spieler 2 möchte aber gleichzeitig sein Paddle nach unten bewegen und drückt also die Taste "S".
Damit wird die Bewegung des Paddles von Spieler 1 abgebrochen.

Wie kann ich das Problem beheben?


Das Eventhandling schaut derzeit so aus:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if Engine.isRunning then
      Engine.KeyDown(Sender, Key, Shift);
end;

----

procedure tMain.KeyDown(var Sender: TObject; var Key: word; var Shift: tShiftState);
begin
  case Key of
    ord('O'): pPlayer1.MoveUp;
    ord('L'): pPlayer1.MoveDown;

    ord('W'): pPlayer2.MoveUp;
    ord('S'): pPlayer2.MoveDown;
  end;
end;
Grüße,
Boris.

Namenloser 10. Mai 2009 16:56

Re: Steuerung zweier Spieler über die Tastatur
 
Das ist ein Hardwareproblem und lässt sich per Software nicht umgehen. Du kannst nur versuchen, andere Tasten zu benutzen.

[Edit]
Sry, nicht genau gelesen. Frage die Tasten in deiner Hauptschleife mit GetAsyncKayState ab.
Delphi-Quellcode:
if GetAsyncKeyState(ord('O')) < 0 then
  pPlayer1.MoveUp;
[/Edit]

igel457 10. Mai 2009 16:56

Re: Steuerung zweier Spieler über die Tastatur
 
Versuche wie in der "Wormhunter-Demo" von Andorra 2D die Windows-API Funktion "GetKeyState" zu verwenden.

Siehe: http://andorra.cvs.sourceforge.net/v...w=markup#l_276

@NamenLozer: Mehr als zwei Tasten sollte jede Tastatur schon gleichzeitig erkennen können. Das ist eher ein "Problem" der VCL.

BoriS. 10. Mai 2009 17:00

Re: Steuerung zweier Spieler über die Tastatur
 
Zitat:

Zitat von NamenLozer
Das ist ein Hardwareproblem und lässt sich per Software nicht umgehen. Du kannst nur versuchen, andere Tasten zu benutzen.

Ich denke nicht, da es in anderen Spielen funktioniert. ;)

Zitat:

Zitat von igel457
Versuche wie in der "Wormhunter-Demo" von Andorra 2D die Windows-API Funktion "GetKeyState" zu verwenden.

Siehe: http://andorra.cvs.sourceforge.net/v...w=markup#l_276

Danke, werde ich machen.

igel457 10. Mai 2009 17:01

Re: Steuerung zweier Spieler über die Tastatur
 
Achso, was mit gerade noch einfällt und vielleicht einfacher ist: Setze in OnKeyDown eine Variable für die gedrückte Taste. Während diese Variable gesetzt ist, verschiebst du den Schläger in die entsprechende Richtung. In OnKeyUp setzt du die Variable wieder zurück.

Namenloser 10. Mai 2009 17:06

Re: Steuerung zweier Spieler über die Tastatur
 
Zitat:

Zitat von igel457
Achso, was mit gerade noch einfällt und vielleicht einfacher ist: Setze in OnKeyDown eine Variable für die gedrückte Taste. Während diese Variable gesetzt ist, verschiebst du den Schläger in die entsprechende Richtung. In OnKeyUp setzt du die Variable wieder zurück.

Variablenverschwendung :mrgreen: Je nach dem, wie stark man abstrahieren will, würde ich es entweder so machen wie in der Wormhunter-Demo, oder GetAsyncKeyState/GetKeyState direkt aufrufen.

BoriS. 10. Mai 2009 17:11

Re: Steuerung zweier Spieler über die Tastatur
 
Problem gelöst. Danke für die schnelle Hilfe.
Habe die "Wormhunter-Variante" gewählt. ;)

Nun läuft das ganze auch noch eine Ecke schneller! :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 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