Also ich habe mal ne Variante ohne den Sinus gemacht:
Code:
if (ball.xpos < -2.7) and (ball.xpos > -3.1) and (ball.ypos < spielerrot.pos + 0.9) and (ball.ypos > spielerrot.pos - 0.95)then
begin
if ball.xspeed < 0 then
begin
if ball.ypos > spielerrot.pos then
begin
ball.yspeed := (ball.ypos-spielerrot.pos)*(0.3);
ball.xspeed := sqrt((0.09 - (ball.yspeed*ball.yspeed)));
end
else
begin
ball.yspeed := (spielerrot.pos-ball.ypos)*(-0.3);
ball.xspeed := sqrt((0.09 - (ball.yspeed*ball.yspeed)));
end;
end;
end
Hierbei stellen die ersten Werte (die bei Ball.xpos getestet werden) den bereich dar, in dem eine Kollision überhaupt stattfinden kann .... die Y - Pos des Balles wird der eines schlägers verglichen ....
Danach erfolgt eine neuberechnung der Ballgeschwindigkeiten, wobei ich dabei immer im bedacht hatte, das die Geschwindigkeit immer 0,3 ist (durch dieses SQRT per Pytagoras auch realisiert).... und: die x-speed ist immer > 0, da die Differenz zwischen Pos(ball) und Pos(Schläger) nie 1 werden kann (wenn sie 1 ist, geht der ball vorbei...)
Ich hoffe, ich ahbe dasnicht zu kompliziert ausgedrückt....
Mein neuer, 13 Teiliger Open GL - Kurs (Samples in Delphi):
www.dcw-group.net
Neu! Ein großer Teil der Demos nach
Kylix übersetzt!
Neu! Teil 2b: Initialisierung von
OpenGL unter Kylix ist fertig!