Donnerstag, 25. Juli 2013

Map-Editor: Ein großer Schritt nach vorne!

Beim Map-Editor habe ich nun eine große Hürde mit viel mathematischer Rechnerei hinter mir:
Die Überprüfung ob der Charakter vor-, oder hinter einem Objekt ( einem Baum, Haus, etc. ) steht. Quasi das 3 dimensionale an unserem 2D Spiel ;).


Wie genau funktioniert das nun?
Es wird zunächst eine Liste erstellt, die nach der Höhe der unteren Kante der Texturen geordnet ist.
Die untere Kante deswegen, weil diese ja quasi den Boden berührt.
Der Spieler bekommt hingegen eine Nummer zugeteilt, die besagt nach der wievielten Textur das Bild des Spielers gezeichnet werden soll.
Beim zeichnen, wird die oben genannte Liste einfach abgearbeitet und der Spieler an der passenden Position dazwischen gezeichnet.

Schwierigkeiten bei der Umsetzung:
Zunächst habe ich versucht einfach die Höhen der unteren Kante in eine Liste einzutragen und die dann per "QuickSort" ( schneller Sortieralgorithmus ) zu sortieren. Dabei hatte ich dann das Problem, dass ich die Nummer der jeweiligen Textur ( jede Textur hat eine eindeutige ID ) nicht mit sortiert wird.
Nach ein paar Anläufen hatte ich es dann soweit, jedoch war die Liste verkehrt herum, sodass die Texturen dementsprechend falsch gezeichnet wurden.
Zunächst hatte ich die Schleifen einfach andersherum laufen lassen ( nicht von 0 bis x, sondern von x bis 0 ), jedoch war das keine optimale Lösung. Nach mehreren Versuchen bin ich dann auf die obige gekommen.

Video:
Hier ein kleines Video, welches zeigt, wie das ganze dann in echt aussieht. Nichts besonderes, es hat aber eine Menge Arbeit gekostet!
Mehr Videos zum Map-Editor gibt es eventuell in Kürze.

Bilder:
Ein paar Bilder zum Map-Editor gibts jedoch schon im Vorraus ;)
Zum Bildarchiv

Version 0.1.2 des Map-Editors:
Nachdem ich ein paar Bugs behoben habe, lade ich die nächste Version des Editors hoch.
Als nächstes kommen dann noch Animationen ( z.B. Lagerfeuer, bewegende Lampen, etc. ), sowie noch kleinere Funktionen, die die Tools ( Füllwerkzeug, Radierer, etc. ) des Editors betreffen.

mfg
Hauke



Kommentare:

  1. Ka ob dir das jetzt noch hilft, aber bei spriteBatch.draw kann man auch layerDepth mitgeben. Das ganze wird dann von XNA sortiert und je nach layerDepth gezeichnet. (Du musst bei spriteBatch.begin SpriteSortMode.BackToFront angeben ...)

    AntwortenLöschen
    Antworten
    1. Direkt helfen kann es ist, meins funktioniert ja ;), ich hätte bei layerDepth jedoch die Bedenken, dann das auch viel Arbeit ist, da eine Textur zwar eine niedrige Y-Koordinate haben kann, jedoch gleichzeitig eine tiefe Unterkante ( ein Baum o.ä. ). Dann müsste man auch wieder unterscheiden, welches er dann zuerst zeichnen soll. Leider habe ich kein Beispielscript im Internet ( auf die schnelle ) finden können, weswegen das jetzt nur mein erster Eindruck/ meine erste Überlegung wäre.

      Löschen