Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Problem mit Schläger beim Pong Spiel (https://www.delphipraxis.net/88444-problem-mit-schlaeger-beim-pong-spiel.html)

fantasyboy973 15. Mär 2007 13:30


Problem mit Schläger beim Pong Spiel
 
hi leute
bei meinem Pong spiel habe ich ein panel als spielfeld und sobald man den schläger nach oben oder unten bewegtund er am ende des spielfeldes ist ragt er über das panel hinaus und man sieht ihn nicht mehr.
nun die frage an euch wie kann ich es machen das der schläger nur innerhalb des Spielfeldes bleibt und nicht verschwindet???

hier mal meine procedur für die Bewegung der 2 Schläger

Delphi-Quellcode:
procedure TfrmPong.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  // --- Steuerung Schläger 2
  If (Key = VK_DOWN) then    //Pfeiltaste nach unten
  begin
    Schläger2.Top :=Schläger2.top + 20;
  end
  else if (Key = VK_UP) then  //Pfeiltraste nach oben
  begin
    Schläger2.Top := Schläger2.Top - 20;
  end

// --- Steuerung Schläger 1
  else if (Key = 65) then     //A Taste
  begin
    Schläger1.Top := Schläger1.Top + 20;
  end
  else if (Key = 81) then     //Q Taste
    Schläger1.Top := Schläger1.Top - 20;
end;

Sko 15. Mär 2007 13:43

Re: Problem mit Schläger beim Pong Spiel
 
du musst in der Funktion noch abfangen ob der Schläger oben oder unten anstößt, sollte im Groben so aussehen:
Delphi-Quellcode:
If (Key = VK_DOWN) and (Schlaeger2.Top >= 0) then    //Pfeiltaste nach unten
  begin
    Schlaeger2.Top :=Schlaeger2.top + 20;
  end
  else if (Key = VK_UP) (Schlaeger2.Top < (Panel.Height - Schlaeger2.Height)) then  //Pfeiltraste nach oben
  begin
    Schlaeger2.Top := Schlaeger2.Top - 20;
  end

// --- Steuerung Schläger 1 
  else if (Key = 65) and (Schlaeger1.Top >= 0) then     //A Taste
  begin
    Schlaeger1.Top := Schlaeger1.Top + 20;
  end
  else if (Key = 81) and (Schlaeger1.Top < (Panel.Height - Schlaeger1.Height)) then     //Q Taste
    Schlaeger1.Top := Schlaeger1.Top - 20;
end;

fantasyboy973 15. Mär 2007 14:35

Re: Problem mit Schläger beim Pong Spiel
 
jo man danke für den tip hat aber leider nicht funtioniert, die 2 schläger gehen immer noch weg und bleiben nicht im spielfeld wenn man nach oben oder unten drückt.
ich weis nicht mehr wie ich es noch machen könnte hab schon mehrere sachen ausprobiert aber es funktioniert einfach nicht. liegt es vielleicht daran das die schläger bei mir label sind???

Sko 17. Mär 2007 10:22

Re: Problem mit Schläger beim Pong Spiel
 
öhm, sorry, falsch rum gedacht^^

Delphi-Quellcode:
If (Key = VK_DOWN) and (Schlaeger2.Top < (Panel.Height - Schlaeger2.Height)) then    //Pfeiltaste nach unten
  begin
    Schlaeger2.Top :=Schlaeger2.top + 20;
  end
  else if (Key = VK_UP) and (Schlaeger2.Top > 0) then  //Pfeiltraste nach oben
  begin
    Schlaeger2.Top := Schlaeger2.Top - 20;
  end

// --- Steuerung Schläger 1
  else if (Key = 65) and (Schlaeger1.Top < (Panel.Height - Schlaeger1.Height)) then     //A Taste
  begin
    Schlaeger1.Top := Schlaeger1.Top + 20;
  end
  else if (Key = 81) and (Schlaeger1.Top > 0) then     //Q Taste
    Schlaeger1.Top := Schlaeger1.Top - 20;
end;

DP-Maintenance 17. Mär 2007 12:05

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Freeware" nach "Multimedia" verschoben.
Es handelt sich nicht um eine fertige Freeware-Applikation.

fantasyboy973 17. Mär 2007 12:13

Re: Problem mit Schläger beim Pong Spiel
 
jo danke nochmals hat jetzt funktioniert.

weist du vielleicht noch wie man es machen kann das wenn z.B. spieler1 die A Taste gedrückt hält das der Schläger dann dauerhaft bis zum anschlag am spielfeldrand nach unten läuft und das das dann auch bei dem Spieler 2 geht? denn bis jetzt ist es noch so wenn ein spieler das macht dann geht das bei dem 2. nicht.

Matze 17. Mär 2007 12:18

Re: Problem mit Schläger beim Pong Spiel
 
Moin,

das OnKeyDown-Ereignis wird einmalig beim Herunterdrücken einer Taste aufgerufen, wie es der Name sagt. Soll die Aktion ausgeführt werden, solange die Taste gedrückt ist, musst du das OnKeyPress-Ereignis nutzen.

fantasyboy973 17. Mär 2007 12:38

Re: Problem mit Schläger beim Pong Spiel
 
habe es jetzt mit OnKeyPress Ereignis probiert aber da lassen sich die schläger dann garnicht mehr bewegen!

Matze 17. Mär 2007 13:48

Re: Problem mit Schläger beim Pong Spiel
 
Hallo

Zitat:

Zitat von fantasyboy973
habe es jetzt mit OnKeyPress Ereignis probiert aber da lassen sich die schläger dann garnicht mehr bewegen!

Tatsache, OnKeyPress wird nur bei Tasten aufgerufen, die einen ASCII-Code senden und dies ist bei den Pfeiltasten nicht der Fall. Für die Buchstaben ginge es so:

Delphi-Quellcode:
else if (Key = #97) OR (Key = #65) then  // a bzw. A
begin
  Schlaeger1.Top := Schlaeger1.Top + 20;
end
else if (Key = #81) OR (Key = #113) then // q bzw. Q
  Schlaeger1.Top := Schlaeger1.Top - 20;
Bei den Pfeiltasten musst du wohl oder übel mit OnKeyDown und OnKeyUp abfragen, ob eine Taste nun gedrückt ist oder nicht und entsprechend darauf reagieren. Oder du legst die Pfeiltasten-Aktion auf P und Ö (oder Ähnliches), was das einfachste für dich sein dürfte.

fantasyboy973 17. Mär 2007 19:57

Re: Problem mit Schläger beim Pong Spiel
 
habe bei dem OnKeyPress Ereignis mal die tasten o und l genommen für den 2. spieler. hat aber leider immer noch nicht funktioniert.

Matze 17. Mär 2007 20:03

Re: Problem mit Schläger beim Pong Spiel
 
Hast du's so und KeyPreview des Formulars auf true?

Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = #97) OR (Key = #65) then         // a bzw. A
    Schlaeger1.Top := Schlaeger1.Top + 20
  else if (Key = #81) OR (Key = #113) then   // q bzw. Q
    Schlaeger1.Top := Schlaeger1.Top - 20
  else if (Key = #108) OR (Key = #76) then   // l bzw. L
    Schlaeger2.Top := Schlaeger2.Top + 20
  else if (Key = #111) OR (Key = #79) then   // o bzw. O
    Schlaeger2.Top := Schlaeger2.Top - 20;
end;
Das geht bei mir wunderbar.

fantasyboy973 17. Mär 2007 20:18

Re: Problem mit Schläger beim Pong Spiel
 
ich hatte die Eigenschaft KeyPreview nicht auf true gestellte aber nachdem ich das gemacht hatte funktionierte es trotzdem noch nicht. die schläger bewegen sich einfach nicht.

Matze 17. Mär 2007 20:19

Re: Problem mit Schläger beim Pong Spiel
 
Der Code, den ich gerade eben gepostet habe, funktioniert ganz sicher. Kommen Fehler oder tut sich einfach nichts?

fantasyboy973 17. Mär 2007 20:21

Re: Problem mit Schläger beim Pong Spiel
 
nee es kommen keine fehler es tut sich nur nichts

Matze 17. Mär 2007 20:27

Re: Problem mit Schläger beim Pong Spiel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hm das kann eigentlich nicht sein. Den Code hast du sicher im OnKeyPress-Ereignis? Ich habe den Code vorhin getestet und der geht bei mir. :gruebel:

Edit: ich habe mein Projekt einmal angehängt.

fantasyboy973 17. Mär 2007 20:39

Re: Problem mit Schläger beim Pong Spiel
 
ja so hatte ich es auch aber hat nicht funktioniert.

bei dem was du da hattest das hab ich ja auch aber im OnKeyDown Ereignis.

da tritt aber das gleiche problem auf wie bei mir.

es soll nämlich wenn man a (nach unten) gedrückt hält der 1. schläger dauerhaft nach unten laufen bis man a los lässt und wenn der 2. spieler das auch macht dann sollte das bei dem auch funktionieren.

es geht aber immer nur jeweil bei einem vom beiden spielern.

Matze 17. Mär 2007 21:00

Re: Problem mit Schläger beim Pong Spiel
 
Jetzt verstehe ich dein Problem! Bei dir klappt es nicht, dass sich Schläger 1 und 2 gleichzeitig bewegen lassen. :wall:

Das könntest du leicht über einen Timer (Intervall max. 50) lösen:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if getAsyncKeyState(65) < 0 then           // a
    Schlaeger1.Top := Schlaeger1.Top + 20
  else if getAsyncKeyState(81) < 0 then      // q
    Schlaeger1.Top := Schlaeger1.Top - 20;
  if GetAsyncKeyState(vk_up) < 0 then        // arrow up
    Schlaeger2.Top := Schlaeger2.Top - 20
  else if GetAsyncKeyState(vk_down) < 0 then // arrow down
    Schlaeger2.Top := Schlaeger2.Top + 20
end;
Nur kann es dabei vorkommen, dass bei einem Tastendruck der Schläger um 2 Einheiten bewegt wird bzw. bei zu kurzem Druck gar nicht. Nur wie man das am gescheitesten löst, kann ich dir nicht sagen. Natürlich könnte man das in einen Thread auslagern, doch das halte ich fast für etwas overkilled.

fantasyboy973 17. Mär 2007 21:20

Re: Problem mit Schläger beim Pong Spiel
 
jo da haste recht.

funktioniert.

na da kann ich mich ja jetzt wieder anderen sachen meines projektes zuwenden.

hab mich ja auch lange genug an der einen sache aufgehalten.

und danke nochmal an alle ohne euch hätte ich das bestimmt nicht geschafft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 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-2025 by Thomas Breitkreuz