Animation: Letztes Frame #112

Closed
opened 2026-09-17 06:46:05 +02:00 by admin · 1 comment

Speziell beim Ping-Pong fällt es auf: das letzte Frame dauert doppelt so lang wie alle anderen. ein volles Frame am schluss, und beim umdrehen auch volles Frame am Anfang. sprich, bei 10 frames werden im endeffect 11 frames abgespielt oder so

Speziell beim Ping-Pong fällt es auf: das letzte Frame dauert doppelt so lang wie alle anderen. ein volles Frame am schluss, und beim umdrehen auch volles Frame am Anfang. sprich, bei 10 frames werden im endeffect 11 frames abgespielt oder so
admin added the high-priority label 2026-09-17 06:46:05 +02:00
admin added this to the Development project 2026-09-17 06:46:05 +02:00
admin moved this to Next in Development on 2026-09-17 06:46:29 +02:00
admin moved this to Done in Development on 2026-09-17 07:12:36 +02:00
Owner

Erledigt in cc14988.

Ursache: Ping-pong drehte nicht auf dem letzten Key um, sondern einen Frame dahinter — beide Enden liefen doppelt (Keys 0…9: 20 statt 18 Frames je Hin und Zurück, überblendete Werte standen am Ende einen Frame still).

Fix:

  • playheadAt (src/core/model/animation.ts) dreht jetzt auf dem letzten Key um und meldet zusätzlich reverse.
  • Springende Werte (Texture, Boolean, Text, Choice) halten auf dem Rückweg den Key, an dem der Playhead zuletzt vorbeikam — sonst wäre der letzte Frame gar nicht und der vorletzte doppelt zu sehen.
  • Laufzeit, Timeline und Vorschau reichen reverse durch und zeigen dasselbe Bild. Loop und beide Once-Modi unverändert.

Tests:

  • Unit: jeder Frame erscheint im 1/60-s-Takt genau einmal (beide Enden inklusive), x dreht ohne Stillstand um. Gegenprobe: ohne Richtungsregel 1 Test rot, mit altem Umkehrpunkt 3 rot.
  • Lokal: npm run check → 92 Files, 1191 Tests; smoke-actor → 21 Checks (Ping-pong über 3 Frames); GM_STEPS=24,25,26 → 101 Checks.
  • CI auf 4c92a94: Task 76 gate → CHECK EXIT 0, Task 77 suite → ALL PASSED – 943 checks, Smokes 24 / 19 / 21.

Wiki: Animations.md beschreibt die Ping-pong-Regel (5113c10).

Erledigt in `cc14988`. **Ursache:** Ping-pong drehte nicht auf dem letzten Key um, sondern einen Frame dahinter — beide Enden liefen doppelt (Keys 0…9: 20 statt 18 Frames je Hin und Zurück, überblendete Werte standen am Ende einen Frame still). **Fix:** - `playheadAt` (`src/core/model/animation.ts`) dreht jetzt auf dem letzten Key um und meldet zusätzlich `reverse`. - Springende Werte (Texture, Boolean, Text, Choice) halten auf dem Rückweg den Key, an dem der Playhead zuletzt vorbeikam — sonst wäre der letzte Frame gar nicht und der vorletzte doppelt zu sehen. - Laufzeit, Timeline und Vorschau reichen `reverse` durch und zeigen dasselbe Bild. Loop und beide Once-Modi unverändert. **Tests:** - Unit: jeder Frame erscheint im 1/60-s-Takt genau einmal (beide Enden inklusive), `x` dreht ohne Stillstand um. Gegenprobe: ohne Richtungsregel 1 Test rot, mit altem Umkehrpunkt 3 rot. - Lokal: `npm run check` → 92 Files, 1191 Tests; `smoke-actor` → 21 Checks (Ping-pong über 3 Frames); `GM_STEPS=24,25,26` → 101 Checks. - CI auf `4c92a94`: Task 76 `gate` → `CHECK EXIT 0`, Task 77 `suite` → `ALL PASSED – 943 checks`, Smokes 24 / 19 / 21. Wiki: `Animations.md` beschreibt die Ping-pong-Regel (`5113c10`).
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#112