Tilemap, Z-Order einzelner Tiles per Y #228

Closed
opened 2026-09-24 11:55:35 +02:00 by admin · 1 comment

Es gibt tiles bspw. eben in einem top down die sollen hinter einem (bspw. player sprite) sein das bei y drunter ist, aber davor sein wenn der player überhalb (y) dem sprite ist, dann soll das tile vor dem player gerendert werden.

Es gibt tiles bspw. eben in einem top down die sollen hinter einem (bspw. player sprite) sein das bei y drunter ist, aber davor sein wenn der player überhalb (y) dem sprite ist, dann soll das tile vor dem player gerendert werden.
admin added this to the Development project 2026-09-24 11:55:35 +02:00
admin moved this to Next in Development on 2026-09-24 11:55:41 +02:00
admin changed title from TIlemap, Z-Order einzelner Tiles per Y to Tilemap, Z-Order einzelner Tiles per Y 2026-09-24 18:07:26 +02:00
Owner

Umgesetzt in 5085438 und 8904841 (gepusht mit af6ac12).

Sort by Y am Layer (5085438)

  • Neuer Schalter „Sort by Y“ unter der Layer-Liste im Tilemap-Panel, gespeichert als sortByY am Layer, jede Änderung ist ein Undo-Schritt.
  • Ein solcher Layer liefert einen Draw-Slot pro Zeile. Auf seiner z-Stufe werden die Zeilen und alle Objekte nach ihrer Unterkante sortiert, bei Gleichstand entscheidet wie bisher die Hierarchie. Andere z-Stufen bleiben unverändert.
  • Ein nicht sortierter Layer und der Map-Knoten bleiben auf derselben z-Stufe hinter allem Sortierten. Der Boden gehört also auf eine eigene, tiefere z-Stufe.
  • Neue Tile-Property Sort offset (ganze Zeilen, -16 bis 16): Eine Baumkrone mit 1 wird mit dem Stamm darunter sortiert.
  • Scene View, Game View, Play und Picking laufen über dieselbe Regel in src/viewport/drawOrder.ts.

Sort line an der Frame (8904841)

  • Pro Frame ein Wert in Bildpixeln ab der Unterkante (Standard 0). Ein Sprite mit dieser Frame steht für die Sortierung um denselben Anteil seiner Box höher, z. B. auf Höhe der Füße statt am Schattenrand.
  • Im Textur-Tab als gelbe gestrichelte Linie mit Griff links neben der Frame, im Inspector unter Sorting. Undo-fähig.
  • Pro Frame statt pro Textur, weil eine Textur mehrere Spritesheets enthalten kann. Alle Frames einer Laufanimation sollten denselben Wert haben.

Tests

  • Unit: 16 neue Tests in tests/viewport/sort-by-y.test.ts, Gate zuletzt 2364 Tests grün.
  • e2e: 40p-iii (Schalter, Zeilen-Slot, Undo) und 37b-ii (Griff ziehen, Undo, Inspector-Zeile).
  • Gegenproben: ohne Y-Sortierung, ohne Offset, ohne Sort line, ohne Zeile im Picking und ohne Zeilen-Container fällt jeweils genau der passende Test.

Grenzen

  • Bei gedrehten Maps ist „unten“ die Welt-Y-Achse.
  • Ein y-sortierter Layer kostet etwa einen Draw-Call pro Zeile und Tile.

Doku im Wiki: Tilemaps (Abschnitt „Sorting by Y“), Tiles (Sort offset), Textures (Sort line).

Umgesetzt in `5085438` und `8904841` (gepusht mit `af6ac12`). **Sort by Y am Layer** (`5085438`) - Neuer Schalter „Sort by Y“ unter der Layer-Liste im Tilemap-Panel, gespeichert als `sortByY` am Layer, jede Änderung ist ein Undo-Schritt. - Ein solcher Layer liefert einen Draw-Slot pro Zeile. Auf seiner z-Stufe werden die Zeilen und alle Objekte nach ihrer Unterkante sortiert, bei Gleichstand entscheidet wie bisher die Hierarchie. Andere z-Stufen bleiben unverändert. - Ein nicht sortierter Layer und der Map-Knoten bleiben auf derselben z-Stufe hinter allem Sortierten. Der Boden gehört also auf eine eigene, tiefere z-Stufe. - Neue Tile-Property **Sort offset** (ganze Zeilen, -16 bis 16): Eine Baumkrone mit 1 wird mit dem Stamm darunter sortiert. - Scene View, Game View, Play und Picking laufen über dieselbe Regel in `src/viewport/drawOrder.ts`. **Sort line an der Frame** (`8904841`) - Pro Frame ein Wert in Bildpixeln ab der Unterkante (Standard 0). Ein Sprite mit dieser Frame steht für die Sortierung um denselben Anteil seiner Box höher, z. B. auf Höhe der Füße statt am Schattenrand. - Im Textur-Tab als gelbe gestrichelte Linie mit Griff links neben der Frame, im Inspector unter *Sorting*. Undo-fähig. - Pro Frame statt pro Textur, weil eine Textur mehrere Spritesheets enthalten kann. Alle Frames einer Laufanimation sollten denselben Wert haben. **Tests** - Unit: 16 neue Tests in `tests/viewport/sort-by-y.test.ts`, Gate zuletzt 2364 Tests grün. - e2e: 40p-iii (Schalter, Zeilen-Slot, Undo) und 37b-ii (Griff ziehen, Undo, Inspector-Zeile). - Gegenproben: ohne Y-Sortierung, ohne Offset, ohne Sort line, ohne Zeile im Picking und ohne Zeilen-Container fällt jeweils genau der passende Test. **Grenzen** - Bei gedrehten Maps ist „unten“ die Welt-Y-Achse. - Ein y-sortierter Layer kostet etwa einen Draw-Call pro Zeile und Tile. Doku im Wiki: *Tilemaps* (Abschnitt „Sorting by Y“), *Tiles* (Sort offset), *Textures* (Sort line).
admin moved this to Done in Development on 2026-09-25 07:40:10 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#228