Ein neuer Asset-Typ Curve: eine selbst gebaute Easing-Kurve, die man überall dort auswählen kann, wo heute eine fertige Ease gewählt wird.
Warum
Heute gibt es nur die eingebauten Kurven: Linear, Step und die Penner-Kurven (Sine … Bounce) mit In/Out/In-out am Animation-Key (easedShare in src/core/model/animation.ts), am Lerp-Node (#246) nur Linear/In/Out/In-out. Eigene Bewegungen wie „erst überschießen, dann zweimal nachfedern“ lassen sich damit nicht bauen.
Asset
Neuer Typ curve, Label „Curve“, nicht platzierbar (wie Palette oder Animation). Erscheint im +-Menü des Asset-Panels.
Inhalt: eine Liste von Punkten (t, v). t läuft von 0 bis 1, erster Punkt fest bei t = 0, letzter fest bei t = 1. v ist frei, darf also auch unter 0 oder über 1 gehen (Überschießen wie Back/Elastic).
Jeder Punkt kann Bezier-Handles haben, wie bei Vector art: ohne Handle ist das Segment eine Gerade, mit Handle eine Kurve. Ein Handle allein reicht für eine Kurve.
Ein neues Curve-Asset startet als Gerade von (0, 0) nach (1, 1), also linear.
Eigener Tab
Der Curve-Tab zeigt die Kurve in einem Diagramm: t waagrecht, v senkrecht, mit Hilfslinien bei 0 und 1.
Punkte setzen (Klick auf die Kurve oder freie Fläche), verschieben, löschen. Die zwei Endpunkte lassen sich nur senkrecht verschieben und nicht löschen.
Handles ziehen, wie im Vector-art-Editor. Handle entfernen macht das Segment wieder gerade.
Punkte dürfen sich in t nicht überholen: Die Kurve muss für jedes t genau einen Wert haben. Handles werden in t auf den Bereich zwischen den Nachbarpunkten geklemmt, sonst würde die Kurve rückwärts laufen.
Optional: Vorlagen zum Start (die eingebauten Eases als Ausgangspunkt) und eine kleine Vorschau, die einen Punkt entlang der Kurve laufen lässt.
Undo für jeden Schritt, wie in den anderen Editoren.
Verwendung
Animation-Key: Im Inspector des Keys gibt es neben den eingebauten Kurven die Wahl „Curve“ mit einem Asset-Picker. Gespeichert wird die Asset-Id am Key. easedShare wertet dann die Kurve aus.
Lerp-Node: Beim Parameter Ease ebenfalls „Curve“ mit Asset-Picker. t bleibt auf 0…1 begrenzt, das Ergebnis darf über b hinaus gehen, wenn die Kurve überschießt.
Auswertung: Zu einem t wird auf der Bezier-Kurve der passende Wert gesucht (Bezier nach t auflösen, z. B. per Newton/Bisektion wie bei CSS cubic-bezier). Das ist eine reine Funktion in src/core/model/, gemeinsam für Editor-Vorschau, Animation und Graph.
Fehlendes Asset: Ist die gewählte Kurve gelöscht, fällt der Key bzw. der Node auf Linear zurück und meldet das im Inspector bzw. als Problem am Node.
Löschen einer Curve, die noch benutzt wird: gleiche Warnung wie bei anderen referenzierten Assets.
e2e: Curve anlegen, im Tab Punkt setzen und Handle ziehen (echte Maus), am Animation-Key und am Lerp auswählen, Wert gegen die gerechnete Kurve prüfen.
Wiki: neue Seite oder Abschnitt zu Curve, Einträge bei Animations und Behaviors (Lerp).
Ein neuer Asset-Typ **Curve**: eine selbst gebaute Easing-Kurve, die man überall dort auswählen kann, wo heute eine fertige Ease gewählt wird.
## Warum
Heute gibt es nur die eingebauten Kurven: Linear, Step und die Penner-Kurven (Sine … Bounce) mit In/Out/In-out am Animation-Key (`easedShare` in `src/core/model/animation.ts`), am `Lerp`-Node (#246) nur Linear/In/Out/In-out. Eigene Bewegungen wie „erst überschießen, dann zweimal nachfedern“ lassen sich damit nicht bauen.
## Asset
- Neuer Typ `curve`, Label „Curve“, nicht platzierbar (wie Palette oder Animation). Erscheint im `+`-Menü des Asset-Panels.
- Inhalt: eine Liste von Punkten `(t, v)`. `t` läuft von 0 bis 1, erster Punkt fest bei `t = 0`, letzter fest bei `t = 1`. `v` ist frei, darf also auch unter 0 oder über 1 gehen (Überschießen wie Back/Elastic).
- Jeder Punkt kann Bezier-Handles haben, **wie bei Vector art**: ohne Handle ist das Segment eine Gerade, mit Handle eine Kurve. Ein Handle allein reicht für eine Kurve.
- Ein neues Curve-Asset startet als Gerade von (0, 0) nach (1, 1), also linear.
## Eigener Tab
- Der Curve-Tab zeigt die Kurve in einem Diagramm: `t` waagrecht, `v` senkrecht, mit Hilfslinien bei 0 und 1.
- Punkte setzen (Klick auf die Kurve oder freie Fläche), verschieben, löschen. Die zwei Endpunkte lassen sich nur senkrecht verschieben und nicht löschen.
- Handles ziehen, wie im Vector-art-Editor. Handle entfernen macht das Segment wieder gerade.
- Punkte dürfen sich in `t` nicht überholen: Die Kurve muss für jedes `t` genau einen Wert haben. Handles werden in `t` auf den Bereich zwischen den Nachbarpunkten geklemmt, sonst würde die Kurve rückwärts laufen.
- Optional: Vorlagen zum Start (die eingebauten Eases als Ausgangspunkt) und eine kleine Vorschau, die einen Punkt entlang der Kurve laufen lässt.
- Undo für jeden Schritt, wie in den anderen Editoren.
## Verwendung
- **Animation-Key:** Im Inspector des Keys gibt es neben den eingebauten Kurven die Wahl „Curve“ mit einem Asset-Picker. Gespeichert wird die Asset-Id am Key. `easedShare` wertet dann die Kurve aus.
- **Lerp-Node:** Beim Parameter *Ease* ebenfalls „Curve“ mit Asset-Picker. `t` bleibt auf 0…1 begrenzt, das Ergebnis darf über `b` hinaus gehen, wenn die Kurve überschießt.
- **Auswertung:** Zu einem `t` wird auf der Bezier-Kurve der passende Wert gesucht (Bezier nach `t` auflösen, z. B. per Newton/Bisektion wie bei CSS `cubic-bezier`). Das ist eine reine Funktion in `src/core/model/`, gemeinsam für Editor-Vorschau, Animation und Graph.
- **Fehlendes Asset:** Ist die gewählte Kurve gelöscht, fällt der Key bzw. der Node auf Linear zurück und meldet das im Inspector bzw. als Problem am Node.
- **Löschen einer Curve**, die noch benutzt wird: gleiche Warnung wie bei anderen referenzierten Assets.
## Tests
- Unit: Auswertung der Kurve (Gerade = linear, Endpunkte exakt, Überschießen, Handles geklemmt), Laden/Speichern, fehlendes Asset → linear.
- e2e: Curve anlegen, im Tab Punkt setzen und Handle ziehen (echte Maus), am Animation-Key und am Lerp auswählen, Wert gegen die gerechnete Kurve prüfen.
- Wiki: neue Seite oder Abschnitt zu *Curve*, Einträge bei *Animations* und *Behaviors* (Lerp).
admin
added this to the Development project 2026-09-27 15:28:12 +02:00
admin
moved this to Next in Development on 2026-09-27 15:28:14 +02:00
Umgesetzt in 393b8ec, inklusive Vorlagen und Vorschau.
Was es gibt
Asset-Typ Curve (im +-Menü, Gruppe Curves). Eine neue Kurve ist die Gerade von (0, 0) nach (1, 1).
Curve-Tab: Klick auf die Linie setzt einen Punkt und erhält die Form, Klick auf freie Fläche setzt ihn dort. Punkte und Griffe ziehen, Doppelklick oder Delete löscht, Alt-Klick schaltet rund/gerade, „Point: …“ wie bei Vector art. Jeder Schritt ist ein Undo-Schritt.
Ein Wert pro t: Endpunkte fest bei t 0 und 1 (nur senkrecht), Punkte überholen sich nicht, Griffe werden entlang ihrer Richtung gekürzt. Gilt auch beim Laden einer von Hand bearbeiteten Datei.
Vorlagen: alle 30 eingebauten Eases plus Linear, mit Suchfeld, höchstens 0,4 % Abweichung, 2 bis 33 Punkte.
Vorschau: Ein Punkt läuft die Kurve entlang, ein zweiter zeigt nur den Wert. Preview hält sie an.
Animation-Key:Easing → Curve mit Kurven-Auswahl. Lerp:Ease → Curve, das Ergebnis darf über b hinausschießen.
Fehlende Kurve: läuft linear, Inspector und Node melden es, die Löschwarnung nennt die Zahl der Keys und Lerp-Nodes.
Neues e2e-Modul 53 mit 13 Checks, alle mit echter Maus. Die Sollwerte rechnet der Test mit einer eigenen Bezier-Auswertung nach.
Gegenproben greifen: ohne Bezier-Auswertung (4 Unit-Tests fallen), ohne Griffbegrenzung (2), Key findet Kurve nicht, Klick setzt keinen Punkt, Griff-Zug verschiebt den Punkt (jeweils Checks rot).
Wiki: neue Seite Curves, dazu Animations, Behaviors, Architecture, Development (b0318cd).
Umgesetzt in 393b8ec, inklusive Vorlagen und Vorschau.
**Was es gibt**
- Asset-Typ **Curve** (im `+`-Menü, Gruppe *Curves*). Eine neue Kurve ist die Gerade von (0, 0) nach (1, 1).
- **Curve-Tab:** Klick auf die Linie setzt einen Punkt und erhält die Form, Klick auf freie Fläche setzt ihn dort. Punkte und Griffe ziehen, Doppelklick oder Delete löscht, Alt-Klick schaltet rund/gerade, „Point: …“ wie bei Vector art. Jeder Schritt ist ein Undo-Schritt.
- **Ein Wert pro t:** Endpunkte fest bei t 0 und 1 (nur senkrecht), Punkte überholen sich nicht, Griffe werden entlang ihrer Richtung gekürzt. Gilt auch beim Laden einer von Hand bearbeiteten Datei.
- **Vorlagen:** alle 30 eingebauten Eases plus Linear, mit Suchfeld, höchstens 0,4 % Abweichung, 2 bis 33 Punkte.
- **Vorschau:** Ein Punkt läuft die Kurve entlang, ein zweiter zeigt nur den Wert. **Preview** hält sie an.
- **Animation-Key:** *Easing → Curve* mit Kurven-Auswahl. **Lerp:** *Ease → Curve*, das Ergebnis darf über `b` hinausschießen.
- **Fehlende Kurve:** läuft linear, Inspector und Node melden es, die Löschwarnung nennt die Zahl der Keys und Lerp-Nodes.
**Code:** `src/core/model/curve.ts` (Auswertung, Regeln), `curvePresets.ts`, `src/editor/curve/` (Tab).
**Tests**
- `./check.sh` → 180 Files, 2612 Tests, `CHECK EXIT 0`
- `GM_STEPS=1-6,25,53` → ALL PASSED, 309 Checks
- Neues e2e-Modul 53 mit 13 Checks, alle mit echter Maus. Die Sollwerte rechnet der Test mit einer eigenen Bezier-Auswertung nach.
- Gegenproben greifen: ohne Bezier-Auswertung (4 Unit-Tests fallen), ohne Griffbegrenzung (2), Key findet Kurve nicht, Klick setzt keinen Punkt, Griff-Zug verschiebt den Punkt (jeweils Checks rot).
**Wiki:** neue Seite [Curves](https://git.nockal.com/meleki/game-maker/wiki/Curves), dazu *Animations*, *Behaviors*, *Architecture*, *Development* (b0318cd).
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.
Ein neuer Asset-Typ Curve: eine selbst gebaute Easing-Kurve, die man überall dort auswählen kann, wo heute eine fertige Ease gewählt wird.
Warum
Heute gibt es nur die eingebauten Kurven: Linear, Step und die Penner-Kurven (Sine … Bounce) mit In/Out/In-out am Animation-Key (
easedShareinsrc/core/model/animation.ts), amLerp-Node (#246) nur Linear/In/Out/In-out. Eigene Bewegungen wie „erst überschießen, dann zweimal nachfedern“ lassen sich damit nicht bauen.Asset
curve, Label „Curve“, nicht platzierbar (wie Palette oder Animation). Erscheint im+-Menü des Asset-Panels.(t, v).tläuft von 0 bis 1, erster Punkt fest beit = 0, letzter fest beit = 1.vist frei, darf also auch unter 0 oder über 1 gehen (Überschießen wie Back/Elastic).Eigener Tab
twaagrecht,vsenkrecht, mit Hilfslinien bei 0 und 1.tnicht überholen: Die Kurve muss für jedestgenau einen Wert haben. Handles werden intauf den Bereich zwischen den Nachbarpunkten geklemmt, sonst würde die Kurve rückwärts laufen.Verwendung
easedSharewertet dann die Kurve aus.tbleibt auf 0…1 begrenzt, das Ergebnis darf überbhinaus gehen, wenn die Kurve überschießt.twird auf der Bezier-Kurve der passende Wert gesucht (Bezier nachtauflösen, z. B. per Newton/Bisektion wie bei CSScubic-bezier). Das ist eine reine Funktion insrc/core/model/, gemeinsam für Editor-Vorschau, Animation und Graph.Tests
Umgesetzt in
393b8ec, inklusive Vorlagen und Vorschau.Was es gibt
+-Menü, Gruppe Curves). Eine neue Kurve ist die Gerade von (0, 0) nach (1, 1).bhinausschießen.Code:
src/core/model/curve.ts(Auswertung, Regeln),curvePresets.ts,src/editor/curve/(Tab).Tests
./check.sh→ 180 Files, 2612 Tests,CHECK EXIT 0GM_STEPS=1-6,25,53→ ALL PASSED, 309 ChecksWiki: neue Seite Curves, dazu Animations, Behaviors, Architecture, Development (b0318cd).