Einzelnen Beitrag anzeigen

Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Kollision Ball mit Ball über Winkel

  Alt 30. Nov 2006, 11:41
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)
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat