Texture Frame Colliders Eigenschaften #193

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

Welche physikalische Eigenschaften haben Colliders von einer Textur? Vorallem geht es mir um Friction, Bounciness und Density

Welche physikalische Eigenschaften haben Colliders von einer Textur? Vorallem geht es mir um Friction, Bounciness und Density
admin added this to the Development project 2026-09-20 20:46:28 +02:00
admin moved this to Next in Development on 2026-09-20 20:46:31 +02:00
Owner

Umgesetzt in f4ec23d (Wiki a79833f).

Antwort auf die Frage

Tiles hatten bisher eine feste Oberfläche (Friction 0,5, Bounciness 0). Density wirkt bei Tiles nicht, weil eine Tilemap ein statischer Körper ist und sich nie bewegt. Deshalb gibt es sie dort auch jetzt nicht.

1. Friction und Bounciness am Tile

  • Zwei neue Zeilen am Tile-Asset neben Solid und One-way. Sie erscheinen erst, wenn Solid an ist.
  • Standardwerte und Mischregel wie beim Collider: Mittelwert für Friction, Maximum für Bounciness.
  • Zellen werden nach Oberfläche getrennt, genauso wie nach One-Way-Winkel. Eis und Stein verschmelzen also nie zu einem Rechteck, und jede Zelle bringt ihre Oberfläche zu Move und Rapier mit. Die Szene zeigt den Boden trotzdem als eine Kontur.
  • Nebenwirkung: Ein Tile mit Collision Scale unter 1 ist zu einem Nachbarn mit anderer Oberfläche nicht mehr bündig, sondern wird dort eingezogen wie an einer offenen Seite (wie heute schon neben One-Way-Tiles). Steht im Wiki.

2. Collider-Form „Frame collision“ (Nachtrag im Gespräch)

  • Fünfte Shape am Collider mit einer Zeile Frame, gewählt wie die Texture eines Sprites. Gespeichert als Wert frame.
  • Verknüpft, nicht kopiert: Wird der Umriss (#141) im Texture-Tab neu gezeichnet, blockt jeder Collider mit diesem Frame sofort mit dem neuen, im Editor und beim nächsten Play.
  • Frame-Mitte auf dem Ursprung des Colliders, ein Bildpixel ist eine Einheit. Dreht, skaliert und spiegelt sich mit wie jede andere Form.
  • Mehrere Umrisse blocken alle, jeder wird wie ein Polygon in konvexe Teile zerlegt.
  • Ohne Frame, mit ganzer Textur oder mit einem Frame ohne Umriss: rote Box, blockt nichts.
  • Die Ecken werden im Texture-Tab bearbeitet, nicht in der Szene, weil der Umriss dem Frame gehört.
  • Alle Stellen kennen den Frame: Move, Rapier, Raycast, Erkennung, Klicktest, Zeichnen, Auswahlrahmen.

Tests

./check.sh                           → 130 Files, 1931 Tests, CHECK EXIT 0   (vorher 129 / 1917)
npm run build                        → BUILD EXIT 0
GM_STEPS=1-8,39-43 (frisch geseedet) → ALL PASSED – 376 checks
  • 14 neue Unit-Tests in tests/core/surface.test.ts, die Move-Tests laufen gegen Editor-Run und Physik.
  • 3 neue e2e-Checks: 40l (Oberflächen-Zeilen hängen an Solid), 42e (Collider hat Frame-Größe, ein Walker klettert den Hang im Frame hoch).
  • Drei Gegenproben greifen: Move ignoriert die Tile-Oberfläche (2 fallen), Rapier ignoriert sie (1 fällt), Frame-Form fällt auf die Box zurück (5 fallen).
  • Check-Summe 1198 ist gerechnet (1195 + 3), gemessen wird sie im CI-Lauf.

Nicht gebaut, nur Idee: Add collider auf einem Sprite, dessen Frame einen Umriss hat, könnte gleich „Frame collision“ wählen. Heute gibt es dort immer eine Box.

Umgesetzt in f4ec23d (Wiki a79833f). ## Antwort auf die Frage Tiles hatten bisher eine feste Oberfläche (Friction 0,5, Bounciness 0). Density wirkt bei Tiles nicht, weil eine Tilemap ein statischer Körper ist und sich nie bewegt. Deshalb gibt es sie dort auch jetzt nicht. ## 1. Friction und Bounciness am Tile - Zwei neue Zeilen am Tile-Asset neben *Solid* und *One-way*. Sie erscheinen erst, wenn *Solid* an ist. - Standardwerte und Mischregel wie beim Collider: Mittelwert für Friction, Maximum für Bounciness. - Zellen werden nach Oberfläche getrennt, genauso wie nach One-Way-Winkel. Eis und Stein verschmelzen also nie zu einem Rechteck, und jede Zelle bringt ihre Oberfläche zu Move und Rapier mit. Die Szene zeigt den Boden trotzdem als eine Kontur. - Nebenwirkung: Ein Tile mit Collision Scale unter 1 ist zu einem Nachbarn mit anderer Oberfläche nicht mehr bündig, sondern wird dort eingezogen wie an einer offenen Seite (wie heute schon neben One-Way-Tiles). Steht im Wiki. ## 2. Collider-Form „Frame collision“ (Nachtrag im Gespräch) - Fünfte Shape am Collider mit einer Zeile **Frame**, gewählt wie die Texture eines Sprites. Gespeichert als Wert `frame`. - **Verknüpft, nicht kopiert:** Wird der Umriss (#141) im Texture-Tab neu gezeichnet, blockt jeder Collider mit diesem Frame sofort mit dem neuen, im Editor und beim nächsten Play. - Frame-Mitte auf dem Ursprung des Colliders, ein Bildpixel ist eine Einheit. Dreht, skaliert und spiegelt sich mit wie jede andere Form. - Mehrere Umrisse blocken alle, jeder wird wie ein Polygon in konvexe Teile zerlegt. - Ohne Frame, mit ganzer Textur oder mit einem Frame ohne Umriss: rote Box, blockt nichts. - Die Ecken werden im Texture-Tab bearbeitet, nicht in der Szene, weil der Umriss dem Frame gehört. - Alle Stellen kennen den Frame: Move, Rapier, Raycast, Erkennung, Klicktest, Zeichnen, Auswahlrahmen. ## Tests ``` ./check.sh → 130 Files, 1931 Tests, CHECK EXIT 0 (vorher 129 / 1917) npm run build → BUILD EXIT 0 GM_STEPS=1-8,39-43 (frisch geseedet) → ALL PASSED – 376 checks ``` - 14 neue Unit-Tests in `tests/core/surface.test.ts`, die Move-Tests laufen gegen Editor-Run und Physik. - 3 neue e2e-Checks: 40l (Oberflächen-Zeilen hängen an Solid), 42e (Collider hat Frame-Größe, ein Walker klettert den Hang im Frame hoch). - Drei Gegenproben greifen: Move ignoriert die Tile-Oberfläche (2 fallen), Rapier ignoriert sie (1 fällt), Frame-Form fällt auf die Box zurück (5 fallen). - Check-Summe **1198** ist gerechnet (1195 + 3), gemessen wird sie im CI-Lauf. **Nicht gebaut, nur Idee:** *Add collider* auf einem Sprite, dessen Frame einen Umriss hat, könnte gleich „Frame collision“ wählen. Heute gibt es dort immer eine Box.
admin moved this to Done in Development on 2026-09-21 07:40:34 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#193