Hi,
ich spiele gerade ein wenig mit Kollisions-Abfragen und dem Abprallen von Bällen bzw. Shapes herum, um zu zeigen, dass das mit trigonometrischen Funktionen viel schöner ist, als wenn ich das über Steigungen mache. *g*
Mein "Berechnungs"routine sieht so aus:
Delphi-Quellcode:
var
dx, dy: integer;
begin
// recalculate angle (collision-detection)
if spShape.Top > (ClientHeight - spShape.Height) then
fDeg := 90 + fDeg;
if spShape.Left > (ClientWidth - spShape.Width) then
fDeg := 90 + fDeg;
if spShape.Top <= 0 then
fDeg := 90 + fDeg;
if spShape.Left <= 0 then
fDeg := 90 + fDeg;
// calculate movement
dx := round( cos(DegToRad(fDeg))*10 );
dy := round( sin(DegToRad(fDeg))*10 );
// Move shape in direction of the angle
spShape.Left := spShape.Left + dx;
spShape.Top := spShape.Top + dy;
end;
Funktioniert schon ganz gut, aber immer wenn der Ball von "links" kommt (unten wäre das ein Winkel von 45°), dann dreht der Ball sich erstmal im Kreis, bevor er die richtige Richtung einschlängt. Schwierig zu beschreiben, deswegen im Anhang mal die Exe.
Kann mir jemand schnell erklären, woran das liegt?
Chris