Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Problem mit Kollisionsabfrage. (https://www.delphipraxis.net/70097-problem-mit-kollisionsabfrage.html)

bastischo 24. Mai 2006 22:48


Problem mit Kollisionsabfrage.
 
Ich habe mir ein rundes Pong geschrieben.
Also das Paddle bewegt sich auf einer Kreisbahn und der Ball darf diesen kreis nicht verlassen. Bei meiner Kollisionsabfrage zwischen Ball und Paddle gibt es aber das komische Problem, dass der Ball manchmal hängenbleibt oder HINDURCHWANDERT.
Delphi-Quellcode:
procedure TBall.stoss(aPaddle:TPaddle);
var i:integer;
begin
for i:= aPaddle.Winkel-aPaddle.Breite to aPaddle.Winkel+aPaddle.Breite do
if sqrt(sqr(x-(round(cos(i/57.3)*(150))+200))+sqr(y-(round(sin(i/57.3)*(150))+200)))<r+8 then
  begin
  if vx>0 then vx:=-random(5)+1 else vx:=random(5)+1;
  if vy>0 then vy:=-random(5)+1 else vy:=random(5)+1;
  Punkte:=Punkte+1;
  end;
end;
Also das mit dem random ist nur zum testen da und es funktioniert auch ohne noch nicht. (z.B. vx:=-vx).

Mein Timer der das ganze regelt sieht so aus:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
begin
if GetAsyncKeystate(VK_LEFT) < 0 then
Paddle.move(Paintbox1.Canvas,6)
else
if GetAsyncKeystate(VK_RIGHT) < 0 then
Paddle.move(Paintbox1.Canvas,-6)
else
Paddle.move(Paintbox1.Canvas,0);
for i:= 1 to High(Ball) do
Ball[i].move(Paintbox1.Canvas);
Form1.Caption:='Cyclo Pong - '+inttostr(Punkte)+' Punkte';
end;
Ball und Paddle sind heir eben meine
TBall(x,y(koordinaten),vx,vy(geschwindigkeiten),r( radius),farbe) variable und meine
TPaddle(Winkel,Breite und farbe) variable.


Hat vllt jemand 'ne idee wie ich das Problem beheben könnte?


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