Hallöchen,
ich bin gerade dabei, ein tilebasiertes 2D Spielchen zu erstellen. Dabei bereitet mir die korrekte Anordnung der verschiedenen Layer Probleme. Als Testobject habe ich einen Baum gewählt (in 32 x 32 Pixel große Tiles geteilt).
Das Problem dabei ist, der Spieler soll sich einmal vor dem Baum, und einmal hinter dem Baum bewegen können. Also einmal nicht verdeckt vom Baumstamm und Baumkrone und einmal verdeckt.
Dabei ist es jetzt wichtig, wie ich die Sprites auf der Höhe anordne. ich habe von -10000 bis 10020 Positionen wo ich Sprites anorndern kann, diese werden in der Reihnfolge von - nach + angezeigt. (Also 10020 als oberstes, -10000 als unterstes, verdeckt von allen folgenden).
Ich habe für jedes Tile eine Positionsvariable welche angibt, ob sich das Tile "immer über dem Spieler", "über dem Spieler wenn Spieler-Y kleiner oder gleich Tile-Y ist" und "immer unter dem Spieler".
Das erste und letzte sollte klar sein, das zweite bedeutet praktisch, dass das Tile auf einer höheren Ebene als der Spieler angezeigt wird, wenn des Spielers Y-Position (Wo seine Füße stehen) auf dem Bildschirm auf gleicher Höhe oder weiter oben sind. Praktisch, wenn er hinter dem Tile steht, wird es auf höherer Ebene angezeigt, ansonsten unter ihm.
Soweit die Theorie, in der Praxis gibt es da leider Probleme:
(Aus Kontrastgründen ist der Spieler hier komplett weiß)
Die Symbole Viereck, Kreis und Pfeil kennzeichnen den Positionsstatus der Tiles. Viereck ist unter Spieler, Kreis ist über Spieler wenn dieser hinter dem Tile steht und Pfeil ist immer im Vordergrund.
Wie man bei 1. erkennen kann, soll es so aussehen, wenn der Spieler davor steht.
Bei 2. steht der Spieler hinter dem Baum, da das erste Problem. Der Oberkörper und Kopf werden durch den Stamm hindurch angezeigt, da die Füße des Spieler unterhalb des Baumstammes sind und der Spieler damit im Vordergrund steht. Lediglich das eine Tile welches auf Fußhöhe ist, wird darüber gelegt.
Bei 3. habe ich versucht, das Problem zu beseitigen, indem ich die Tiles auf "immer drüber" schalte, welche in 2. noch unter dem Spieler waren. Dabei ergibt sich leider wieder ein anderes Problem, bei dem der Spieler nun nicht mehr vor dem Baum stehen kann, ohne dass diese immer-höheren Tiles ihm den Kopf "absägen".
Etwas zur Technik:
Ich verwende C++ mit OpenGL, daher hab ich hardwarebasierte freie Platzierung der Sprites im 3D-Raum, was die Sache eigentlich erleichtern "sollte" (Bis jetzt merk ich wenig davon -__-).
Bisher befindet sich der Spieler immer an Position 0 in der Tiefenebene. Tiefergelegte Sprites werden unter 0 gestapelt, höhere über 0. Und wie gesagt, bis jetzt liegt die Grenze für den Bereich zwischen -10000 und 10020 möglichen Positionen. (wobei afaik auch Kommazahlen möglich wären, was theoretisch unendlich Positionen ausmachen würde).
Die Frage ist nun, wie kann man so einen Effekt vermeiden und wie realisiert man eine korrekte Anordnung der Höhen von Sprites? Bei mehreren Layern untereinander gibts noch keine Probleme aber wenn ein Spieler hinzu kommt, der mal hinter und mal vor einem Layer sein soll, dann siehts aus wie oben auf den Bildern.
Ich hoffe, es gibt hier ein paar kundige Leute die mir dabei helfen können.
mfg.
Ynnus