Hallo Community,
ich bin gerade dabei, mir ein Framework für 2D Platformer zu schreiben und habe dabei auch in Aussicht, wofür ich es dann letzten Endes eigentlich benutzen will :p
Seit längerem kämpfe ich allerdings mit dem Problem der internen Leveldarstellung bzw. der externen Verwaltung als Datei. Eventuell habt ihr da mehr Erfahrung und ein paar Tipps.
Was ich speichern will:
- Boden mit Höhe
- schwebende Plattformen (also Ober- und Unterkante eines soliden Tiles)
(- Spezialfall der Mauer, vor die man laufen und die man durch einen Sprung nach oben erklettern kann)
- Levelteile mit Hintergrundtextur (-> "Innenraum")
- Objekte, Gegner
- Hotspots
Momentan verwalte ich meine Levels so, dass ich sie als Bitmap (.png) zeichne und die Levelinformationen in den Farbkanälen kodiere (z. B. Rotkanal: ObjektID, Grünkanal: TexturID, usw.). Die Farbkanal-Infos lese ich dann im Spiel in ein Array (von 1x1 Spielfeldeinheiten große Zellen) aus und zeichne dann nur denjenigen Teil des Arrays, der sich in einem bestimmten Rechteck um den Spieler befindet.
Der Vorteil ist, dass ich dadurch schnell und einfach den nähesten Boden (nicht ganz unwichtig bei einem klettern-und-verstecken-basierten Spiel) unter einem Objekt immer finde, indem ich das Array von Spielerhöhe an nach unten durchlaufen kann und ebenso entscheiden kann, welcher Teil des Levels derzeit ignoriert wird, was beides z. B. bei einer linked list mit variablen Zellgrößen erheblich schwieriger wäre.
Das hat aber auch einige Mankos:
- Ich kann keine größeren Hintergrundbereiche verbinden, um z. B. eine Textur über mehr als 1x1 Spielenheiten gehen zu lassen. Ständiges ein- und ausbinden einer Textur ist aber ineffizient und außerdem kämen dann noch float Informationen für die Texturkoordinaten zu den nötigen Informationen...
- Es gibt einfach nicht genügend Farbkanäle, um z. B. Unterkante, Oberkante, Textur, Schräge, Objekt, Hotspot usw. pro Pixel zu kodieren.
- Das Auslesen klappt super, aber das Erstellen ist wenn man mehr als nur den Boden zeichnen will... nicht gerade angenehm. Der Computer sieht die einzelnen Farbabstufungen deutlich genauer als ich beim Levelerstellen
Ich könnte natürlich xml-ähnliche Dateistrukturen für die Informationen einführen und eine Monster-Auslese-Methode schreiben, allerdings wäre das Erstellen/Verwalten mindestens ebenso unangenehm.
Wie würdet ihr Levelinfos intern und extern verwalten? Habt ihr Tipps oder ein gutes Tutorial? Ich suche schon seit einigen Tagen in der Richtung...