Hallo,
ich habe ein kleines Spiel.
Und zwar ist man eine Linie die in eine richtig gezeignet wird, man kann jedoch die "Direction" über den Winkel bestimmen.
Also einfach gesagt - die Linie geht einfach einem Winkel nach den man mit den Pfeiltasten anpassen kann
Dafür benutze ich eine einfache Funktion:
Delphi-Quellcode:
function GetNextPosition(X, Y, Length : real; Angel: integer): TRealPoint;
var
Orientation: TAngleOrientation;
x2,y2:real;
a, b,
alpha: Double;
begin
a := Length * Sin(DegToRad(Angel));
b := Sqrt(Sqr(Length) - Sqr(a));
if (Angel > 0) AND (Angel < 91) then
begin
Orientation := aoRight;
end
else if (Angel > 90) AND (Angel < 181) then
begin
Orientation := aoBottom;
Angel := Angel - 90;
end
else if (Angel > 180) AND (Angel < 271) then
begin
Orientation := aoLeft;
Angel := Angel - 180;
end
else if (Angel > 270) AND (Angel < 360) then
begin
Orientation := aoTop;
Angel := Angel - 270;
Angel := abs(Angel - 90);
end;
case Orientation of
aoRight : begin
x2 := X + b;
y2 := Y + a;
end;
aoBottom : begin
x2 := X - b;
y2 := Y + a;
end;
aoLeft : begin
x2 := X - b;
y2 := Y + a;
end;
aoTop : begin
x2 := X + b;
y2 := Y + a;
end;
end;
Result := RealPoint(x2, y2);
end;
Ausgeführt wird ganz einfach:
Position := GetNextPosition(Position.x, Position.y, DeltaTime * Speed, Direction);
Mit der Funktion krieg ich also den Punkt wo der Spieler sich jetzt befinden sollte.
Nun möchte ich den ganzen weg abspeichern.
Das habe ich bisher mit einer abfrage gemacht, die alle 100ms den Punkt speichert und die Linie wird dann mit
DrawPolyline gezeichnet.
Nun könnt ihr euch die Probleme bestimmt schon vorstellen.
- Eckige Linie
- Performanceverlust bei mehreren Spielern
- Hohen Memory verbrauch
- Falls der Server mal länger braucht, kann er ja nicht wirklich jeden Punkt aufzeichnen...
Welche Möglichkeiten gibt es dies eleganter zu lösen?
Freundliche Grüsse