Video im Spiel steuern: Play, Pause, Seek und „On video finished“ #410

Open
opened 2026-10-11 21:24:18 +02:00 by meleki · 0 comments
Owner

Aus #156, Durchgang 6. In #402 und #404 als Folge-Issue vorgemerkt, angelegt wurde es nie.

Herkunft

  • #402, Nicht dabei (vorerst): „Graph-Nodes zum Steuern (Play, Pause, Seek, ‚Video ended‘): eigenes Folge-Issue“.
  • #402, Abschluss 4314, Folge-Issues: „Graph-Nodes zum Steuern (Play, Pause, Seek, ‚Video ended‘): noch kein Issue angelegt“.
  • #404, Nicht dabei: „Graph-Nodes zum Steuern …, wie in #402 als Folge-Issue vorgemerkt“.

Stand

  • Der einzige Node rund um Video ist die Aufnahme aus #405 (src/core/graph/nodes/action/recordingNodes.ts). Ein Behavior kann ein Video weder anhalten noch an eine Stelle setzen, und es erfährt nicht, wann ein Clip zu Ende ist.
  • Freie Videos (Video clock: Free) laufen ab dem Start der Szene von selbst. Es gibt einen Player je Clip (videoKey, src/core/model/video.ts:107), zwei Sprites mit demselben Clip teilen sich also Bild und Zeit.
  • Gesteuerte Videos (Driven, #404) folgen Video time. Ein Behavior kann diese Zahl heute schon schreiben. Damit lässt sich Pause und Seek nachbauen, aber nur, wenn das Behavior die Zeit jeden Frame selbst weiterzählt.

Vorschlag

  • Play video / Pause video (Action, Eingang target, Standard Owner): setzt das Video des Sprites fort bzw. hält es an.
  • Seek video (Action, target, time in Sekunden ab Clip-Start): springt dorthin. Die Regel für eine Zeit hinter dem Clip-Ende ist dieselbe wie bei Video time (Loop im Kreis, sonst letztes Bild).
  • On video finished (Ereignis, Feld Video leer = jedes, Ausgang object): kommt, wenn ein Video ohne Loop sein letztes Bild erreicht. Vorbild ist On animation finished (src/core/graph/nodes/events/OnAnimationFinished.ts).
  • Video time als Daten-Node zum Abfragen (Sekunden ab Clip-Start, dazu length).
  • Die Nodes wirken im Editor-Play und im exportierten Spiel gleich.

Offen (mit Vorschlag)

  1. Geteilter Player bei Free: Ein Pause video an Sprite A würde auch Sprite B mit demselben Clip anhalten. Vorschlag: Ein Sprite, das einer dieser Nodes anfasst, bekommt einen eigenen Player, wie ein gesteuertes Sprite (Schlüssel mit der Id des Trägers). Alle anderen bleiben beim gemeinsamen Player.
  2. Gesteuerte Videos: Vorschlag: Die Nodes tun dort nichts und schreiben eine Zeile ins Log. Die Zeit gehört dort der Animation. Wer im Behavior steuern will, schreibt Video time.
  3. Pause der Partie: Vorschlag: so wie heute, eine angehaltene Partie hält jedes Video an. Ein per Node pausiertes Video bleibt nach dem Fortsetzen der Partie pausiert.
  4. Ton: Vorschlag: Pause video macht stumm, Play video hörbar, wie das Video vorher eingestellt war. Keine eigene Lautstärke am Node.

Fertig, wenn

  • Unit-Test: Seek hinter das Clip-Ende mit und ohne Loop, Ereignis genau einmal pro Durchlauf ohne Loop, nie mit Loop. Dazu eine Gegenprobe.
  • e2e 66: Ein Behavior hält ein Video an, setzt es auf 0,5 s (Testvideo grün) und spielt es weiter. Gemessen per Pixel, dazu On video finished in der Liste der Ereignisse.
  • Das Wiki unter Videos und Behaviors nennt die Nodes.
Aus #156, Durchgang 6. In #402 und #404 als Folge-Issue vorgemerkt, angelegt wurde es nie. ## Herkunft - #402, *Nicht dabei (vorerst)*: „Graph-Nodes zum Steuern (Play, Pause, Seek, ‚Video ended‘): eigenes Folge-Issue“. - #402, Abschluss 4314, *Folge-Issues*: „Graph-Nodes zum Steuern (Play, Pause, Seek, ‚Video ended‘): noch kein Issue angelegt“. - #404, *Nicht dabei*: „Graph-Nodes zum Steuern …, wie in #402 als Folge-Issue vorgemerkt“. ## Stand - Der einzige Node rund um Video ist die Aufnahme aus #405 (`src/core/graph/nodes/action/recordingNodes.ts`). Ein Behavior kann ein Video weder anhalten noch an eine Stelle setzen, und es erfährt nicht, wann ein Clip zu Ende ist. - **Freie Videos** (`Video clock: Free`) laufen ab dem Start der Szene von selbst. Es gibt einen Player je Clip (`videoKey`, `src/core/model/video.ts:107`), zwei Sprites mit demselben Clip teilen sich also Bild und Zeit. - **Gesteuerte Videos** (`Driven`, #404) folgen `Video time`. Ein Behavior kann diese Zahl heute schon schreiben. Damit lässt sich Pause und Seek nachbauen, aber nur, wenn das Behavior die Zeit jeden Frame selbst weiterzählt. ## Vorschlag - **`Play video`** / **`Pause video`** (Action, Eingang `target`, Standard Owner): setzt das Video des Sprites fort bzw. hält es an. - **`Seek video`** (Action, `target`, `time` in Sekunden ab Clip-Start): springt dorthin. Die Regel für eine Zeit hinter dem Clip-Ende ist dieselbe wie bei `Video time` (Loop im Kreis, sonst letztes Bild). - **`On video finished`** (Ereignis, Feld *Video* leer = jedes, Ausgang `object`): kommt, wenn ein Video ohne Loop sein letztes Bild erreicht. Vorbild ist `On animation finished` (`src/core/graph/nodes/events/OnAnimationFinished.ts`). - **`Video time`** als Daten-Node zum Abfragen (Sekunden ab Clip-Start, dazu `length`). - Die Nodes wirken im Editor-Play und im exportierten Spiel gleich. ## Offen (mit Vorschlag) 1. **Geteilter Player bei `Free`:** Ein `Pause video` an Sprite A würde auch Sprite B mit demselben Clip anhalten. Vorschlag: **Ein Sprite, das einer dieser Nodes anfasst, bekommt einen eigenen Player**, wie ein gesteuertes Sprite (Schlüssel mit der Id des Trägers). Alle anderen bleiben beim gemeinsamen Player. 2. **Gesteuerte Videos:** Vorschlag: **Die Nodes tun dort nichts und schreiben eine Zeile ins Log.** Die Zeit gehört dort der Animation. Wer im Behavior steuern will, schreibt `Video time`. 3. **Pause der Partie:** Vorschlag: so wie heute, eine angehaltene Partie hält jedes Video an. Ein per Node pausiertes Video bleibt nach dem Fortsetzen der Partie pausiert. 4. **Ton:** Vorschlag: `Pause video` macht stumm, `Play video` hörbar, wie das Video vorher eingestellt war. Keine eigene Lautstärke am Node. ## Fertig, wenn - Unit-Test: Seek hinter das Clip-Ende mit und ohne Loop, Ereignis genau einmal pro Durchlauf ohne Loop, nie mit Loop. Dazu eine Gegenprobe. - e2e 66: Ein Behavior hält ein Video an, setzt es auf 0,5 s (Testvideo grün) und spielt es weiter. Gemessen per Pixel, dazu `On video finished` in der Liste der Ereignisse. - Das Wiki unter *Videos* und *Behaviors* nennt die Nodes.
meleki added the new label 2026-10-11 21:24:18 +02:00
admin added this to the Development project 2026-10-11 21:25:32 +02:00
admin added low-priorityquestion and removed new labels 2026-10-12 15:23:00 +02:00
admin moved this to Next in Development on 2026-10-12 15:23:20 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#410