Hi, ich glaube ich habe ein konzeptionelles Problem
Ich arbeite an einer 2D Engine mit isometrischer Darstellung (ähnlich Age of Empires 1/2, Diablo 1/2, Anno 1602 uvm.). Dabei habe ich auf einer Karte:
- Fußboden-Kacheln (z.B. Steinboden), über die wird alles andere drübergezeichnet
- flache Objekte (z.B. Teleport-Bereich), kommt über den Boden aber unter die normalen Objekte
- Wandkacheln (z.B. Felswand)
- normale Objekte (z.B. Spielfigur)
Dabei habe ich die Kacheln in assoziativen Feldern angeordnet, als Key dient die Kachel-Koordinate. Jede Kachel enthält zusätzlich eine Liste von Objekten, die sich auf ihr befinden. Die Objekte "stehen" dabei prinzipiell auf genau einer Kachel (siehe Screenshots). Diese Liste wird beim Bewegen aktualisiert, so dass ich beim Zeichnen keine Objekte weiter suchen muss (sondern direkt habe).
Hier mal der Pseudo-Code zum Rendering-Vorgang:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Für jede sichtbare Zeile
Für jede sichtbare Spalte
Ermittle Fußbodenkachel
Zeichne Kachel
Für jede sichtbare Zeile
Für jede sichtbare Spalte
Ermittle Fußbodenkachel
Für jedes flache Objekt auf Kachel
Zeichne Objekt
Für jede sichtbare Zeile
Für jede sichtbare Spalte
Ermittle Wandkachel
Zeichne Kachel
Für jedes normale Objekt auf Kachel
Zeichne Objekt
|
Ich vermute bald, dass ich in
|
Quellcode
|
1
2
|
Für jedes flache Objekt auf Kachel
Zeichne Objekt
|
eine Zeichenreihenfolge einbauen sollte. Nur fehlt mir dazu der Ansatz.
Ich habe hier noch ein paar Screenshots zusammengeschnitten, die mein aktuelles Problem zeigen. Die Grafiken sind von
http://opengameart.org/ entnommen, also nicht meine.
Die Treppe im Bild hat als Bezugsecke (zum Rechnen) jene in der Mitte Unten (ist ja Iso, also um 45° gedreht). Nehme ich eine andere Bezugsecke habe ich ähnliche Probleme (dann ist meine Figur mal drüber obwohl sie drunter sein sollte). Zu sehen sind zwei Fälle wo es klappt und einige wo es nicht klappt. Die gesamte Treppe ist eine Grafik.
Habt ihr eine Idee?
LG Glocke