AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Steuerung zweier Spieler über die Tastatur
Thema durchsuchen
Ansicht
Themen-Optionen

Steuerung zweier Spieler über die Tastatur

Ein Thema von BoriS. · begonnen am 10. Mai 2009 · letzter Beitrag vom 10. Mai 2009
Antwort Antwort
BoriS.

Registriert seit: 10. Mai 2009
3 Beiträge
 
#1

Steuerung zweier Spieler über die Tastatur

  Alt 10. Mai 2009, 17:29
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.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Steuerung zweier Spieler über die Tastatur

  Alt 10. Mai 2009, 17:56
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]
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Steuerung zweier Spieler über die Tastatur

  Alt 10. Mai 2009, 17:56
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.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
BoriS.

Registriert seit: 10. Mai 2009
3 Beiträge
 
#4

Re: Steuerung zweier Spieler über die Tastatur

  Alt 10. Mai 2009, 18:00
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 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.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Steuerung zweier Spieler über die Tastatur

  Alt 10. Mai 2009, 18:01
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.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Steuerung zweier Spieler über die Tastatur

  Alt 10. Mai 2009, 18:06
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 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.
  Mit Zitat antworten Zitat
BoriS.

Registriert seit: 10. Mai 2009
3 Beiträge
 
#7

Re: Steuerung zweier Spieler über die Tastatur

  Alt 10. Mai 2009, 18:11
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!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 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