Aus #141 (offener Punkt „Auch für platzierte Sprites?“, dort: „nicht in diesem Issue, eigenes Folge-Issue, wenn gewünscht“).
Befund
Seit #141 kann ein Frame im Texture-Tab mehrere Kollisions-Umrisse haben. Genutzt werden sie nur von der Tilemap.
Ein platziertes Sprite mit diesem Frame braucht heute einen eigenen Collider, dessen Polygon (#151) man noch einmal von Hand nachzeichnet.
Zu bauen (Vorschlag)
Neue Collider-Form Frame outline: Der Collider übernimmt die Umrisse des aktuellen Frames seines Sprites, skaliert auf die Sprite-Größe, gedreht und gespiegelt mit dem Objekt.
Mehrere Umrisse werden zu mehreren Teilen desselben Colliders (wie konkave Polygone in #151).
Tests: gleiche Kollision wie ein von Hand gleich gezeichnetes Polygon, in beiden Systemen.
Offen (mit Vorschlag)
Animierte Sprites: Umriss des aktuellen Frames oder immer des ersten? Vorschlag: erster Frame wie bei den Tiles; Wechsel pro Frame würde den Rapier-Collider ständig neu bauen.
Frame ohne Umriss: Vorschlag: volles Rechteck des Frames.
Aus #141 (offener Punkt „Auch für platzierte Sprites?“, dort: „nicht in diesem Issue, eigenes Folge-Issue, wenn gewünscht“).
## Befund
- Seit #141 kann ein Frame im Texture-Tab mehrere Kollisions-Umrisse haben. Genutzt werden sie nur von der Tilemap.
- Ein platziertes Sprite mit diesem Frame braucht heute einen eigenen Collider, dessen Polygon (#151) man noch einmal von Hand nachzeichnet.
## Zu bauen (Vorschlag)
- Neue Collider-Form **Frame outline**: Der Collider übernimmt die Umrisse des aktuellen Frames seines Sprites, skaliert auf die Sprite-Größe, gedreht und gespiegelt mit dem Objekt.
- Mehrere Umrisse werden zu mehreren Teilen desselben Colliders (wie konkave Polygone in #151).
- Tests: gleiche Kollision wie ein von Hand gleich gezeichnetes Polygon, in beiden Systemen.
## Offen (mit Vorschlag)
1. **Animierte Sprites:** Umriss des aktuellen Frames oder immer des ersten? Vorschlag: erster Frame wie bei den Tiles; Wechsel pro Frame würde den Rapier-Collider ständig neu bauen.
2. **Frame ohne Umriss:** Vorschlag: volles Rechteck des Frames.
meleki
added the new label 2026-09-19 11:41:51 +02:00
dieses feautre würde ich komplett verwerfen. stattdessen ein helper der einen automatisch collider erstellt bei einem frame. da ist auch die frage wie genau der collider sein soll (wieviele punkte) - dazu einfach bei texture tab. generate collider... => dialog mit maximale anzahl von punkten (default: 4), dann wird der polygon collider erstellt
dieses feautre würde ich komplett verwerfen. stattdessen ein helper der einen automatisch collider erstellt bei einem frame. da ist auch die frage wie genau der collider sein soll (wieviele punkte) - dazu einfach bei texture tab. generate collider... => dialog mit maximale anzahl von punkten (default: 4), dann wird der polygon collider erstellt
admin
removed the new label 2026-09-19 12:39:51 +02:00
admin
added this to the Development project 2026-09-19 12:39:55 +02:00
admin
added the new label 2026-09-19 12:49:01 +02:00
Der ist schon mit #193 (f4ec23d) gekommen, anders als hier ursprünglich geplant: als Collider-Form Frame collision, verknüpft mit dem Frame. Ein Collider dieser Form blockt mit den Umrissen seines Frames, und ändert sich der Umriss im Texture-Tab, ändert sich jeder Collider mit.
Teil 2: der Helfer "Generate collision…"
Im Header des Texture-Tabs gibt es den Knopf Generate collision…. Er ist aus, solange die Textur keine Frames hat.
Zeile
Vorgabe
Max points
8 (3 bis 64)
Solid from … % alpha
50
All frames of the texture
aus; ohne gewählten Frame an und gesperrt
Darunter steht live, was Generate schreiben wird (z. B. Frame "Left": 2 outlines, 8 corners). Ist nichts fest genug, bleibt der Knopf aus. Vorhandene Umrisse werden ersetzt, und das Ganze ist ein Undo-Schritt, egal ob für einen Frame oder alle.
So entsteht der Umriss:
Jede Insel aus festen Pixeln wird entlang der Pixelkanten umfahren.
Dann fallen die unwichtigsten Ecken weg, bis höchstens Max points übrig sind und keine Treppenstufe mehr bleibt. Eine Schräge wird so zu einer geraden Kante.
Der Umriss kreuzt sich nie selbst. Wo das Bild das erzwingen würde, wird die konvexe Hülle der Insel genommen.
Krümel unter 1 % der Frame-Fläche fallen weg, außer es ist die einzige Insel. Löcher werden nicht nachgebildet.
Kleinigkeit: Der Keil im Test-Fixture bekommt 4 Ecken statt 3. Seine Spitze ist im Bild ein Pixel breit, und diese echte Kante bleibt stehen, solange Ecken frei sind.
10 neue Unit-Tests in tests/core/trace-collision.test.ts, darunter 150 Zufallsformen, die alle gültig und im Eckenbudget sein müssen.
4 neue e2e-Checks (Block 42f) über die Oberfläche: Dialog, Alpha-Schwelle, All frames, Undo.
Drei Gegenproben greifen: ohne Rückfall auf die Hülle, ohne Treppenschwelle, Dialog ignoriert die Schwelle.
Check-Summe 1202 ist gerechnet (1198 + 4), gemessen wird sie im CI-Lauf.
Doku: Wiki Textures (Abschnitt Generate collision…), Architecture, Development.
Erledigt mit `2d79230` (Code) und Wiki `3d5f892`.
## Teil 1: Collider aus dem Frame-Umriss
Der ist schon mit #193 (`f4ec23d`) gekommen, anders als hier ursprünglich geplant: als Collider-Form **Frame collision**, verknüpft mit dem Frame. Ein Collider dieser Form blockt mit den Umrissen seines Frames, und ändert sich der Umriss im Texture-Tab, ändert sich jeder Collider mit.
## Teil 2: der Helfer "Generate collision…"
Im Header des Texture-Tabs gibt es den Knopf **Generate collision…**. Er ist aus, solange die Textur keine Frames hat.
| Zeile | Vorgabe |
|---|---|
| **Max points** | 8 (3 bis 64) |
| **Solid from … % alpha** | 50 |
| **All frames of the texture** | aus; ohne gewählten Frame an und gesperrt |
Darunter steht live, was **Generate** schreiben wird (z. B. `Frame "Left": 2 outlines, 8 corners`). Ist nichts fest genug, bleibt der Knopf aus. Vorhandene Umrisse werden **ersetzt**, und das Ganze ist **ein Undo-Schritt**, egal ob für einen Frame oder alle.
**So entsteht der Umriss:**
- Jede Insel aus festen Pixeln wird entlang der Pixelkanten umfahren.
- Dann fallen die unwichtigsten Ecken weg, bis höchstens *Max points* übrig sind und keine Treppenstufe mehr bleibt. Eine Schräge wird so zu einer geraden Kante.
- Der Umriss kreuzt sich nie selbst. Wo das Bild das erzwingen würde, wird die konvexe Hülle der Insel genommen.
- Krümel unter 1 % der Frame-Fläche fallen weg, außer es ist die einzige Insel. Löcher werden nicht nachgebildet.
**Kleinigkeit:** Der Keil im Test-Fixture bekommt 4 Ecken statt 3. Seine Spitze ist im Bild ein Pixel breit, und diese echte Kante bleibt stehen, solange Ecken frei sind.
## Tests
```
./check.sh → 131 Files, 1941 Tests, CHECK EXIT 0 (vorher 130 / 1931)
npm run build → BUILD EXIT 0
GM_STEPS=42 (frisch) → ALL PASSED – 20 checks (vorher 16)
```
- 10 neue Unit-Tests in `tests/core/trace-collision.test.ts`, darunter 150 Zufallsformen, die alle gültig und im Eckenbudget sein müssen.
- 4 neue e2e-Checks (Block 42f) über die Oberfläche: Dialog, Alpha-Schwelle, All frames, Undo.
- Drei Gegenproben greifen: ohne Rückfall auf die Hülle, ohne Treppenschwelle, Dialog ignoriert die Schwelle.
- Check-Summe **1202** ist gerechnet (1198 + 4), gemessen wird sie im CI-Lauf.
Doku: Wiki *Textures* (Abschnitt *Generate collision…*), *Architecture*, *Development*.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Aus #141 (offener Punkt „Auch für platzierte Sprites?“, dort: „nicht in diesem Issue, eigenes Folge-Issue, wenn gewünscht“).
Befund
Zu bauen (Vorschlag)
Offen (mit Vorschlag)
dieses feautre würde ich komplett verwerfen. stattdessen ein helper der einen automatisch collider erstellt bei einem frame. da ist auch die frage wie genau der collider sein soll (wieviele punkte) - dazu einfach bei texture tab. generate collider... => dialog mit maximale anzahl von punkten (default: 4), dann wird der polygon collider erstellt
Erledigt mit
2d79230(Code) und Wiki3d5f892.Teil 1: Collider aus dem Frame-Umriss
Der ist schon mit #193 (
f4ec23d) gekommen, anders als hier ursprünglich geplant: als Collider-Form Frame collision, verknüpft mit dem Frame. Ein Collider dieser Form blockt mit den Umrissen seines Frames, und ändert sich der Umriss im Texture-Tab, ändert sich jeder Collider mit.Teil 2: der Helfer "Generate collision…"
Im Header des Texture-Tabs gibt es den Knopf Generate collision…. Er ist aus, solange die Textur keine Frames hat.
Darunter steht live, was Generate schreiben wird (z. B.
Frame "Left": 2 outlines, 8 corners). Ist nichts fest genug, bleibt der Knopf aus. Vorhandene Umrisse werden ersetzt, und das Ganze ist ein Undo-Schritt, egal ob für einen Frame oder alle.So entsteht der Umriss:
Kleinigkeit: Der Keil im Test-Fixture bekommt 4 Ecken statt 3. Seine Spitze ist im Bild ein Pixel breit, und diese echte Kante bleibt stehen, solange Ecken frei sind.
Tests
tests/core/trace-collision.test.ts, darunter 150 Zufallsformen, die alle gültig und im Eckenbudget sein müssen.Doku: Wiki Textures (Abschnitt Generate collision…), Architecture, Development.