Ich habe ein einfaches Tower Defense-Spiel mit einer gekachelten Welt. Kriechen und Türme sind immer auf einem Plättchen.
Wie soll ich die Position von Creeps im Code darstellen? (Kennen Creeps ihre aktuelle Kachel und Position auf dieser Kachel oder sind sie sich ihrer absoluten Weltposition bewusst?)
Grundsätzlich suche ich nach Best Practices, Tipps zum Entwerfen von Mustern oder allgemeinen Einsichten darüber, wie man die Positionierung in einer kachelbasierten Welt verwaltet.
Vielen Dank.
tiles
tower-defense
pwny
quelle
quelle
Antworten:
Nach meiner Erfahrung besteht der beste Weg, mit Positionen in einer kachelbasierten Welt umzugehen, darin, zu ignorieren, dass Sie sich in einer kachelbasierten Welt befinden. Das heißt, halten Sie Ihre Entitäten in Weltpositionen gespeichert, bewahren Sie die Pfade, auf denen Ihre Entitäten unterwegs sind, im Weltraum auf und lassen Sie Ihre Entitäten oder andere Spielelogiken, wenn möglich, nichts über Kacheln wissen überhaupt.
Das Problem bei der Berücksichtigung von Kacheln besteht darin, dass sie Eckfälle in Ihren Spielcode einfügen. Viele neue Stellen, an denen sich Ihr Code auf subtile Weise schlecht verhalten kann. Zum Beispiel müssen Türme nicht nur erkennen können, wie nahe sie Entitäten auf ihrer eigenen Kachel sind, sondern auch den Entitäten auf anderen Kacheln. Und sobald Sie über Kacheln nachdenken, denken Sie darüber nach, die Nachbarn von Kacheln zu finden, in die sich auch leicht Fehler einfügen lassen (insbesondere entlang der Kanten und Ecken des Spielfelds).
Kachelbasierte Welten sind sehr praktisch für die Bearbeitung von Ebenen. Mein Rat ist jedoch, die Kachelstruktur nur zum Bearbeiten zu verwenden. Lass nicht zu, dass sich die Art und Weise, wie das Level aufgebaut ist, in die Spielelogik selbst ausbreitet.
quelle
Ich würde Weltpositionen für Ihre Entitäten verwenden. Das wird gut funktionieren, solange die Welt nicht wirklich riesig wird (wo Weltpositionen aufgrund von Präzision unpraktisch werden, so dass Sie die Welt in Stücke teilen müssen).
Sie können die aktuelle Kachel einfach aus Ihren x- und y- Koordinaten berechnen . Auch das Vorhandensein von Weltkoordinaten erleichtert das Vergleichen von Entitäten erheblich (z. B. liegt Entität X im Bereich von Turm Y? ).
Die Verwendung des anderen Ansatzes funktioniert auch, aber Sie müssen sich ständig mit 2 Koordinatensätzen befassen (Kachelindex (e) und Position innerhalb der Kachel).
Fazit: Beide Ansätze funktionieren, aber die Verwendung von Weltkoordinaten scheint viel praktischer zu sein (weniger Koordinaten, weniger Berechnungen erforderlich). Für Ihre Bequemlichkeit könnten Ihre Entitäten sogar eine Getter-Methode für ihren x- und y- Kachelindex haben, die die aktuelle Kachelposition im laufenden Betrieb berechnet.
quelle