Nachdem ich heute einige Zeit damit verbracht habe, einige Notizen über die Implementierung von Wänden in mein auf Kacheln basierendes Spiel zu machen, wurde mir plötzlich klar, dass es nicht so einfach sein wird, wie ich es mir vorgestellt hatte. Während der aktuelle Stand meiner Arbeit nicht annähernd der tatsächlichen Erstellung des wandbezogenen Codes entspricht, habe ich mir drei verschiedene Möglichkeiten ausgedacht, dies zu tun. Im Moment bin ich mir nicht sicher, welche meiner Ideen am besten funktionieren wird und ob ich etwas verpasst habe oder nicht.
Wichtig: Ein Charakter KANN auf einer Fliese stehen, die Wände hat, unabhängig von ihrer Form.
Allen drei Varianten gemeinsam ist, dass die Tilemap in einem eindimensionalen, auf std :: vector (oder ähnlichen) basierenden Container "aufbewahrt" wird. Die Gründe dafür werden (erstaunlich) in Antworten auf eine andere Frage erläutert.
Behälterklassen in Spielsteinen.
Zurück zu den Wänden.
A) Der einfache Ansatz.
Hier ist nichts Besonderes. Jeder Kachelbehälter kann nicht nur Zeichen enthalten, sondern auch ein oder mehrere Wandobjekte, die an der Kante innerhalb der Kachel angebracht sind.
Vorteile: einfach zu implementieren, nichts am Motor zu ändern. Nachteile: Zwei Dinge. Eins - es mag nur in meinem Kopf sein, aber einige Kombinationen sehen einfach hässlich aus. Zweitens - dieser Ansatz ermöglicht es, aus zwei benachbarten Fliesen eine Doppelwand herzustellen. Das Bauen wird ein wichtiger Teil des Spiels sein, und Doppelwände ermöglichen es den Bauherren, möglicherweise auf die Verbesserung des Materials der Wände durch Spielmittel zu verzichten und nur eine erhöhte Haltbarkeit durch Verdoppelung der vorhandenen Wand zu erreichen. Das ist nicht wünschenswert. Sicher, ich könnte ein Verfahren einschließen, das Doppelwandigkeit verbietet, aber es wird ein schlechtes Gefühl haben.
B) Der kluge (?) Ansatz.
Anstatt die Spieler die ganze Karte doppelwandig spielen zu lassen, werde ich sie schlagen. Jede Wand hat zwei Hälften, die von innen an der Kante der Fliese befestigt sind. Um eine einzelne "Wandeinheit" zu erstellen, muss ich zwei Half-Wall-Objekte in zwei benachbarten Kacheln erstellen.
Vorteile: Es ist symmetrisch !!! Es ist auch keine wesentliche Änderung der aktuellen Motorspezifikationen erforderlich. Nachteile: Mehr Ärger, mehr Objekte und natürlich die "Kappen". Wie Sie auf dem Bild sehen können, wird eine Ecke im Grunde nach einem "Kappen" -Objekt schreien. Ich bin wirklich cool damit, es ist nicht so schwer hinzuzufügen. Hey, ich habe schon einen Plan für dünne Säulen aus vier verbundenen Kappen. Süss. Trotzdem habe ich einige Bedenken hinsichtlich möglicher Probleme mit dem Sichtfeld und der Sichtlinie.
C) Die Gesamtüberholungsvariante.
Oder ich könnte einfach Rahmen und Ecken als separate Container für Spielobjekte erstellen. Genau so.
Vorteile: Nicht einmal sicher. Nun, es ist unkompliziert. Bestimmt. Nachteile: Es ist eine Überholung erforderlich. Zum Glück nicht vom Code, sondern von der aktuellen Spielmechanik - das ist sicher. Die Vorteile liegen nicht so auf der Hand. Auch diese Annäherung erfordert viel mehr Behälter als die zwei vorhergehenden. Die Indizierungsmathematik wird auch ein bisschen mühsam sein.
Hier haben wir es also - drei verschiedene Arten, Wände zwischen Fliesen herzustellen. Wenn es Alternativen gibt, werde ich sie gerne prüfen. Wenn es irgendwelche Vorteile / Nachteile für einen der Ansätze gibt, die ich nicht gesehen habe - weisen Sie bitte darauf hin.