Ok den Code nochmal, damit es übersichtlicher aussieht bissel umgeschrieben.
Delphi-Quellcode:
function GetDistanceOfPoints(X1, Y1, X2, Y2: Single): Single;
begin
result := sqrt(sqr(X1-X2) + sqr(Y1-Y2));
end;
procedure CheckCollision(const AIndex: Integer);
var i: Integer;
LDistance: Single;
LCurrentBall,
LBall: TLvBall;
begin
LCurrentBall := TLvBall(FBalls[AIndex]);
for i := 0 to FBalls.Count-1 do
begin
if i <> AIndex then
begin
LBall := TLvBall(FBalls[i]);
if GetDistanceOfPoints(LBall.X, LBall.Y,
LCurrentBall.X, LCurrentBall.Y) -
(LBall.Radius + LCurrentBall.Radius) <= 0 then
begin
LCurrentBall.Angle := GradToRad(360 + (180 - RadToGrad(LCurrentBall.Angle)));
LBall.Angle := GradToRad(360 + (180 - RadToGrad(LBall.Angle)));
end;
end;
end;
1. Ob ich das Ergebnis aus GetDistance mit der Summe der Radien Vergleiche oder ob ich diese Beiden Werte voneinander abziehe und gucke, ob sie kleiner als Null sind ist ja im Prinzip dasselbe
2. Laut Hilfe gibt es beide RadToDeg und auch RadToGrad
3. (Den Code hab ich hier einfach im Editor umgeschrieben, könnten sich also Fehler eingeschlichen haben)