Klick-Selection im Editor verbessern #203

Closed
opened 2026-09-22 18:46:35 +02:00 by admin · 1 comment

Erstes Problem anhand eines Beispiels: wenn ein Sprite Z kleiner ist von einer Tilemap, sich aber nichts oder eine layer der tilemap hinter (relatives z) vom sprite befindet wird trotzdem die Tilemap ausgewählt.

Zweites (Folge-)Problem, wenn ich jetzt das Sprite in der Hierachie selektiere und dann versuche es in Scene View zu verschieben (drag and drop) dann wird wieder die tilemap ausgewählt und man verschiebt diese, anstelle des sprites. Grundsätzlich müssten wir es so machen das erst beim mouse up die selection passiert und beim drag die aktuelle auswahl verschiebt. wenn du eine bessere idee hast, gerne vorschlagen

Drittens, wieder ein Beispiel: mehrere Sprites liegen übereinander. Man klickt => oberes wird ausgewählt, passt. Jetzt was möglich sein sollte: Man klickt nochmal => das nächste darunter soll ausgewählt werden => usw. - also wenn man etwas ausgewähltes nochmal anklickt, und befindet sich etwas darunter (auch im mauszeiger positions bereich), dann soll das darunter ausgewählt werden.

Erstes Problem anhand eines Beispiels: wenn ein Sprite Z kleiner ist von einer Tilemap, sich aber nichts oder eine layer der tilemap hinter (relatives z) vom sprite befindet wird trotzdem die Tilemap ausgewählt. Zweites (Folge-)Problem, wenn ich jetzt das Sprite in der Hierachie selektiere und dann versuche es in Scene View zu verschieben (drag and drop) dann wird wieder die tilemap ausgewählt und man verschiebt diese, anstelle des sprites. Grundsätzlich müssten wir es so machen das erst beim mouse up die selection passiert und beim drag die aktuelle auswahl verschiebt. wenn du eine bessere idee hast, gerne vorschlagen Drittens, wieder ein Beispiel: mehrere Sprites liegen übereinander. Man klickt => oberes wird ausgewählt, passt. Jetzt was möglich sein sollte: Man klickt nochmal => das nächste darunter soll ausgewählt werden => usw. - also wenn man etwas ausgewähltes nochmal anklickt, und befindet sich etwas darunter (auch im mauszeiger positions bereich), dann soll das darunter ausgewählt werden.
admin added this to the Development project 2026-09-22 18:46:35 +02:00
admin moved this to Next in Development on 2026-09-22 18:46:41 +02:00
Owner

Umgesetzt in ad2a2d7.

Pixi entscheidet nicht mehr selbst, was ein Klick trifft. Der Scene View baut stattdessen eine Liste der Objekte unter dem Mauszeiger, von vorne nach hinten in Zeichenreihenfolge. Die Regel steht als reine Funktion in src/viewport/pick.ts.

Punkt 1 – Tilemap: Eine Tilemap zählt nur dort, wo sie eine Kachel hat. Ihre Tiefe ist das Z der höchsten Ebene, die an der Stelle eine Kachel hat. Eine leere Zelle ist leerer Raum: ein Klick dort hebt die Auswahl auf oder zieht ein Auswahlrechteck auf. Ein Sprite über einer tiefer einsortierten Ebene wird gewählt, nicht die Karte.

Punkt 2 – Ziehen (Variante A, so entschieden): Liegt ein gewähltes Objekt unter der Maus, auch ein verdecktes, verschiebt das Ziehen die aktuelle Auswahl. Sonst wird beim Drücken das oberste Objekt gewählt und gleich mitgezogen.

Punkt 3 – Durchschalten: Ein Klick ohne Ziehen auf ein gewähltes Objekt wählt das nächste darunter. Nach dem untersten kommt wieder das oberste. Liegt dort nur ein Objekt, bleibt alles, wie es ist.

Eine Abweichung: Mit einem Malwerkzeug malt die gewählte Tilemap überall auf ihrem Raster, auch dort, wo ein Sprite darüber liegt. Sonst wäre mit „leere Zelle = leerer Raum“ keine leere Zelle mehr bemalbar. Bisher hat ein Sprite darüber den Klick abgefangen.

Symbole wie Collider und Kamera liegen weiter vorne. Ein Klick auf einen Collider, der auf seinem Sprite sitzt, erreicht jetzt aber mit dem zweiten Klick den Sprite darunter.

Tests

./check.sh                   → 142 Files, 2090 Tests, CHECK EXIT 0   (vorher 2080)
e2e 39,40 (frisch)           → ALL PASSED – 77 checks
e2e 1-16,29,39-43 (frisch)   → ALL PASSED – 626 checks
  • 10 neue Unit-Tests in tests/viewport/pick.test.ts.
  • 4 neue e2e-Checks (Block 40q): Sprite vor einer tiefer einsortierten Ebene, leere Zelle, Durchschalten Kiste → Karte → Kiste, Ziehen der verdeckten gewählten Kiste.
  • Gegenprobe greift: Mit Tilemap über die ganze Fläche und „Druck nimmt immer das oberste Objekt“ fallen 4 Unit-Tests und alle 4 e2e-Checks, mit genau den Symptomen aus dem Issue. Originale per cmp zurück, danach neu gebaut.
  • Neuer Debug-Hook __gm.sceneStack(x, y).

Wiki: Concepts (Auswahl) und Tilemaps (Malen und Select) sind nachgezogen.

Umgesetzt in `ad2a2d7`. Pixi entscheidet nicht mehr selbst, was ein Klick trifft. Der Scene View baut stattdessen eine Liste der Objekte unter dem Mauszeiger, von vorne nach hinten in Zeichenreihenfolge. Die Regel steht als reine Funktion in `src/viewport/pick.ts`. **Punkt 1 – Tilemap:** Eine Tilemap zählt nur dort, wo sie eine Kachel hat. Ihre Tiefe ist das Z der höchsten Ebene, die an der Stelle eine Kachel hat. Eine leere Zelle ist leerer Raum: ein Klick dort hebt die Auswahl auf oder zieht ein Auswahlrechteck auf. Ein Sprite über einer tiefer einsortierten Ebene wird gewählt, nicht die Karte. **Punkt 2 – Ziehen (Variante A, so entschieden):** Liegt ein gewähltes Objekt unter der Maus, auch ein verdecktes, verschiebt das Ziehen die aktuelle Auswahl. Sonst wird beim Drücken das oberste Objekt gewählt und gleich mitgezogen. **Punkt 3 – Durchschalten:** Ein Klick ohne Ziehen auf ein gewähltes Objekt wählt das nächste darunter. Nach dem untersten kommt wieder das oberste. Liegt dort nur ein Objekt, bleibt alles, wie es ist. **Eine Abweichung:** Mit einem Malwerkzeug malt die gewählte Tilemap überall auf ihrem Raster, auch dort, wo ein Sprite darüber liegt. Sonst wäre mit „leere Zelle = leerer Raum“ keine leere Zelle mehr bemalbar. Bisher hat ein Sprite darüber den Klick abgefangen. Symbole wie Collider und Kamera liegen weiter vorne. Ein Klick auf einen Collider, der auf seinem Sprite sitzt, erreicht jetzt aber mit dem zweiten Klick den Sprite darunter. ### Tests ``` ./check.sh → 142 Files, 2090 Tests, CHECK EXIT 0 (vorher 2080) e2e 39,40 (frisch) → ALL PASSED – 77 checks e2e 1-16,29,39-43 (frisch) → ALL PASSED – 626 checks ``` - 10 neue Unit-Tests in `tests/viewport/pick.test.ts`. - 4 neue e2e-Checks (Block 40q): Sprite vor einer tiefer einsortierten Ebene, leere Zelle, Durchschalten Kiste → Karte → Kiste, Ziehen der verdeckten gewählten Kiste. - Gegenprobe greift: Mit Tilemap über die ganze Fläche und „Druck nimmt immer das oberste Objekt“ fallen 4 Unit-Tests und alle 4 e2e-Checks, mit genau den Symptomen aus dem Issue. Originale per `cmp` zurück, danach neu gebaut. - Neuer Debug-Hook `__gm.sceneStack(x, y)`. Wiki: *Concepts* (Auswahl) und *Tilemaps* (Malen und Select) sind nachgezogen.
admin moved this to Done in Development on 2026-09-22 20:34:58 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#203