@BlueCobold:
Er verwendet den
Tiled Map Editor. Die Map die dargestellt wird besteht aus einem oder meist mehreren 'Tile Layern'. Also Ebenen von sprites.
Darüber hinaus können - ein odere mehrere - 'Object Layer' definiert werden. Das kann alles mögliche sein. Rechtecke, Ovale, Polygone. Diesen Objekten können frei definierbare Werte zugewiesen werden (string, int, double, bool).
Diese "Tiled Map" wird als .tmx gespeichert, das eigentlich nichts anderes als ein XML-File ist mit all den Informationen über deine Layer.
@Topic:
Ich verwende für die Kollision einen eigenen objectlayer. Für mich lag der Vorteil darin, bei großen, nicht begehbaren Flächen (Waldrand, See, etc) ein großes Kollisionsobjekt das sich mitunter mit Eigenschaften füttern lässt ("verursacht Schaden" zum Beispiel).
Und was noch wichtiger ist, je nach Sichtbarkeit/Kamera würde ein als blockierend markiertes Tile ggf falsche Grenzen haben, so dass der Spieler zu weit davon entfernt stehen bleibt. Ist mir zB öfters passiert wenn eine Stange oder Pfahl irgendwo stand und der Spieler, aufgrund der Perspektive, optisch viel zu weit davon entfernt stehen bleibt. (Hat jemand verstanden was ich damit sagen will?)
Natürlich ist es mehr Aufwand die Kollisionsflächen separat in die Karte einzubauen als wenn du bei deinen Tiles schon definiert hast welche als "blockierend" zu erachten sind. Andererseits, ist man, finde ich, flexibler was die Grenzen angeht und man sieht im Editor sofort welche Bereiche blockiert sind.
Die Kollisionserkennung mit einem objectlayer ist denkbar einfach, aber das hast du ja eh geschafft.
Über den Tilelayer ist es etwas mühsam. Du musst vor der Bewegung des Spielers ermitteln auf welchem Tile er landen wird. Danach über die Tile-ID herusfinden ob dieses Tile begehbar ist, oder nicht.
In meiner Implementierung ist die Kollisionserkennung per objectlayer vielleicht 5 Zeilen Code.
Performanter ist wahrscheinlich dennoch der Weg über den Tile-Layer, weil nur für das Ziel-Tile die Kollision geprüft werden muss. Wenn du aber nicht 1000e Kollisionsobjekte prüfen musst, wird das wohl zu vernachlässigen sein.