Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.09.2011, 13:12

Tiled für C#

Hallo!
Ich bin zZ dabei eine C# (XNA) Anbindung für Tiled zu schreiben. Tiled ist ein Mapeditor der, wie der Name vermuten lässt, auf Tiles basiert. Weitere Infos zu Tiled und den Downloadlink findet ihr hier: http://www.mapeditor.org/
Es funktioniert soweit schon ganz gut mit orthogonalen Karten. Isometrische habe ich noch nicht implementiert, wird aber noch kommen.
Der Link zu meinem Projekt: http://sourceforge.net/projects/tiledforcsharp/
In der Rar-Datei befindet sich das Visual Studio Projekt mit einem kleinen Beispielspiel (in dem man im Moment nur eine Karte hin- und herschiebt). In dessen Sourcecode sieht man auch gleich wie die Library anzuwenden ist.
Ich erkläre es hier einmal kurz:
1.) Fügt einen Verweis auf die Tiled.dll eurem Projekt hinzu. Und einen Verweis auf TMXProcessorLib.dll in eurem GameContent.
2.) Nachdem ihr eine Karte mit Tiled erstellt habt, schiebt ihr die Karte (die .tmx-Datei) und Tileset(s) in den GameContent eures Spiels. Wählt die tmx-datei aus und wählt im Eigenschaften-Fenster (befindet sich normalerweise unter dem Projektmappenexplorer) als Content Importer und Content Processor jeweils den TMX Importer und den TMX Processor aus.
3.) Fügt diese Zeilen in eure LoadContent-Methode ein ("using Tiled;" nicht vergessen!):

C#-Quelltext

1
2
TiledMap map = Content.Load<TiledMap>("map"); // der Name eurer Karte ohne ".tmx"
TilesetManager.LoadTextures(Content);

Ihr ladet also nur die Karten manuell, die Tilesets werden automatisch in den TilesetManager geschoben. Wenn die Karten eingelesen werden, werden die Texturen der Tilesets aber noch nicht geladen. Deswegen ist der Aufruf TilesetManager.LoadTextures(Content) notwendig. Find ich nicht besonders gut gelöst, vielleicht fällt mir da noch was ein.
4.) Gezeichnet wird die Karte wie gewohnt mit dem SpriteBatch:

C#-Quelltext

1
2
Vector2 mapPosition = new Vector2();
spriteBatch.Draw(map, mapPosition);

Es befindet sich eine SpriteBatch-Extension in der Tiled-Library, ihr müsst dazu also nichts weiter tun. Es stehen auch weitere SpriteBatch-Methoden zur Verfügung, zum Beispiel um nur einen bestimmten Layer zu zeichnen.

In der Rar-Datei befinden sich außerdem die dlls, auf die ihr in eurem Projekt verweisen müsst.

Das wars! Ich hoffe es kann irgendjemand verwenden und freue mich natürlich über Feedback, Bugreports, etcpp.

Edit: Achso! Die einzig unterstützte Codierung ist base64 und die Kompression gzip, für den Rest hatt ich noch keine Zeit.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »shiroto« (27.09.2011, 13:18)