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?