AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Weg im 2D Koordinatensystem merken

Ein Thema von milos · begonnen am 19. Aug 2014 · letzter Beitrag vom 19. Aug 2014
 
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
510 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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz