Ich arbeite an einem gekachelten Karteneditor und muss Kacheln automatisch auswählen, basierend auf den angrenzenden Kacheln. Wenn Sie beispielsweise eine Straßenkachel neben einer anderen Straßenkachel platzieren, müssen die beiden so ausgerichtet werden, dass sie eine durchgehende Straße bilden. Wenn andere Straßen um sie herum sind, müssen wir möglicherweise Eck- oder Kreuzungskacheln verwenden.
Kann jemand einige Algorithmen dafür empfehlen? Das Spiel verwendet eine quadratische Kachelkarte mit 8 Richtungen.
Antworten:
Vielleicht wird das normalerweise so gemacht. Sie haben eine Liste mit verschiedenen Kacheln, die Straßenkacheln in all ihren möglichen Ausrichtungen darstellen. Von links nach rechts, alle vier Ecken, von oben nach unten, was auch immer. Jetzt indizieren Sie alle diese Kacheln mit jeweils einem Byte. 8 Bits, eines für jede Richtung. Dies kann in einer Hashmap oder nach Dateiname erfolgen ... wie auch immer Sie dies tun möchten.
Sie haben also Folgendes:
Der Bytecode für die obige Kachel lautet 00000000 . Dann ist Ihre Kachel, die von links nach rechts (oder von rechts nach links) geht, wie folgt:
Der Bytecode für diese Kachel lautet 10001000 oder 136. Als weiteres Beispiel sehen wir uns einen Drei-Wege-Schnittpunkt an:
Der Bytecode für diese Kachel lautet 10101000 .
Sie sehen wahrscheinlich, wohin ich gehe. Sie setzen Bitpositionen im Byte, die Verbindungen darstellen. Dies ist weitaus besser als der Versuch, eine große if / else-Kette zu erstellen, die ich zuvor gesehen habe. Wenn Sie eine Kachel platzieren möchten, untersuchen Sie die Kacheln um sie herum und erstellen Sie unterwegs ein Byte. Setzen Sie 1 für Kacheln mit Straßen (oder was auch immer Sie verbinden möchten) und 0 für Kacheln ohne Straßen. Wenn Sie fertig sind, haben Sie den Bytecode für die genaue Kachel, die Sie benötigen.
Beachten Sie, dass Sie beim Erstellen der Assets viele davon wiederverwenden können, indem Sie sie einfach drehen und den richtigen Bytecode zuweisen.
BEARBEITEN : Bilder wurden aktualisiert, um weniger beschissen zu sein. Ja das sind besser als vorher.
quelle
Ich würde empfehlen, dass Sie sich diese praktische Seite ansehen, um weitere Informationen zu erhalten, da sie detailliert auf so ziemlich jeden Aspekt Ihrer Arbeit sowie auf einige mögliche Optimierungen eingeht: http://www.angryfishstudios.com / 2011/04 / Abenteuer in der Bitmaske /
Das tldr ist, dass Sie jede benachbarte Zelle abfragen und die Kombination in einem Bitfeld / Byte speichern und sie dann durch eine Karte leiten, die eine Zahl von 0 bis 255 in einen Wert von 0 bis 47 umwandelt, was einem eindeutigen Bild entspricht.
quelle