Einzelnen Beitrag anzeigen

Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
508 Beiträge
 
Delphi 11 Alexandria
 
#1

Weg im 2D Koordinatensystem merken

  Alt 19. Aug 2014, 06:56
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
Milos
  Mit Zitat antworten Zitat