Zitat von
DGL-luke:
du solltest
timebased movement einbauen.
Delphi-Quellcode:
function TPlayer.GetPosition():TVector3d;
var strecke:single;
begin
if self.fMoving then
begin
strecke:=speed / (gettickcount - fstarttime);
{...} //hier die neue position berechnen
end;
end;
@devnull: das hier is aber eleganter
Also das kapier ich grad gar nicht ^^
Aber das da oben war ja nur eine von meinen 2 Versuchen.
Delphi-Quellcode:
procedure TSpieler.Move2(x1,y1 : Single);
var Strecke : Double;
xWeg,yWeg, xDiff,yDiff, Schritte,Steigung : Double;
var i : Integer;
begin
xWeg := x1 -x;
yWeg := y1 -y;
Strecke := Sqrt(Sqr(xWeg)+Sqr(yWeg));
Schritte := Round(Strecke / 2);
if Schritte = 0 then Schritte := 20;
xDiff := xWeg / Schritte;
yDiff := yWeg / Schritte;
for i:= 1 to Round(Schritte) do begin
x := x + xDiff;
y := y + yDiff;
end;
end;
Hier ist nur das Problem das die Bewegung viiiel zu schnell geht. Der Spieler ist sofort da. Also als so als wurde ich einfach
Delphi-Quellcode:
Spieler.x := x1;
Spieler.y := y1;
schreiben ...