Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Nochmal Pong (https://www.delphipraxis.net/60642-nochmal-pong.html)

Floz 10. Jan 2006 14:21


Nochmal Pong
 
Hallo erstmal,

es tut mir ehrlich leid euch mit dem hier anscheinend sehr verbreitetem Pong-Problem zu belästigen, aber ich kriege es einfach nicht hin ^^.
Kann mir kurz jemand aufschreiben, wie ich ein Panel mit der Maus steuere (OnMouseMove) und wie ich einen Ball daran abprallen lasse?

Vielen Dank, wenn sich jemand die Mühe macht ^^.

ichbins 10. Jan 2006 14:28

Re: Nochmal Pong
 
Hallo, herzlich willkommen in der Delphi-Praxis! :party:

ganz wird dir dein Problem niemand lösen. Womit hast du denn Probleme?


in der onmousemove-Prozedur hast du die beiden Variablen x und y, die die Position der Maus angeben. Daraus kannst du eine Position für das Panel berechnen. z.B. so:
Delphi-Quellcode:
panel1.left:=x-form1.left-(panel1.width div 2);
dann musst du entsprechend überprüfen ob der Panel den Ball bereits überlappt, und wenn ja, dann drehst du die y-Geschwindigkeit des Balles um:

Delphi-Quellcode:
var
  ballmittelpunkt:integer;
begin
  ballmittelpunkt:=ball.left+(ball.width div 2);
  if (ballmittelpunkt>panel1.left {falls der Ballmittelpunkt weiter rechts ist als das linke Ende des Schlägers...})
  and (ball.left+(ball.width div 2)<panel1.left+panel1.width {und der Ballmittelpunkt weiter links ist als das rechte Ende des Schlägers})
  and (ball.top+ball.height>=panel1.top {und der Ball überhaupt unterhalb des schlägers ist})
  then {dann}
  begin
    ball.yspeed:=-ball.yspeed;  //YSpeed des Balls umkehren (jetzt geht's nach oben)
    ball.ypos:=panel1.top+1;    //Ball überhalb des Schlägers positionieren, damit nicht gleich wieder ein Effekt ausgelöst wird
  end;


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