Bin gerade auf dem Sprung, aber ich spendiere mal einen Code-Schnipsel aus einem Projekt von mir, der verwendet wird um ein Objekt entlang einer Route wandern zu lassen. Die Routen sind als einfache 2f-Vectoren gespeichert. Touched führt eine einfache Prüfung durch, ob das Objekt eine gewisse Toleranz-Distanz zum Zielpunkt erreicht hat. Anschließend brauchst Du nur noch das Objekt in die richtige Richtung zu drehen.
Delphi-Quellcode:
if control = CC_ROUTE then
begin
rx := route[currentRoute].x;
ry := route[currentRoute].y;
xdiff := abs(rx-pos[0]);
ydiff := abs(ry-pos[1]);
length := sqrt(xdiff*xdiff+ydiff*ydiff);
mx := (rx - pos[0]) / length*speed;
my := (ry - pos[1]) / length*speed;
pos[0] := pos[0] + mx;
pos[1] := pos[1] + my;
// check, if a route point is reached
if touched(rx,ry) then
begin
case route[currentRoute].action of
RP_NEXT:
begin
g_Console.add('Reach rp '+IntToStr(currentRoute)+' proceed to next');
inc(currentRoute)
end;
RP_REPEAT:
begin
g_Console.add('Reach rp '+IntToStr(currentRoute)+' start over again');
currentRoute := 0;
end;
end;
end;