Folge 9: Lulu und Pino fühlen in Szene 3 mit, Lulu hält den Drachen sichtbar im Maul, keine Apfel-Pose mehr

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Lara 2026-11-07 19:11:58 +00:00
parent 9fb33b8806
commit 76bf53ed59
2 changed files with 17 additions and 12 deletions

View file

@ -44,11 +44,13 @@ export const Szene3: React.FC = () => {
<>
<Kamera {...kam}>
<WindGarten boeen={boeen} />
<LuluImWind />
{/* Lulu fühlt mit: staunt beim Plumps, schaut traurig mit Noa, bis Pino Hilfe anbietet; erst bei
ihrem eigenen Satz („Hier oben weht ganz viel Wind!“) lacht sie wieder im Wind */}
<LuluImWind pose={f < z.plumps.start + 20 || f >= z.p1.ende ? undefined : f < z.n1.start ? 'lulu_A4_staunen' : 'lulu_B1_traurig'} />
{/* Noa schaut nach links: die Schnur läuft hinter ihr zum Drachen */}
<SchnurUndDrachen lage={traurig ? {x: DRACHEN_IM_GRAS.x, y: BODEN - LIEGE_HOEHE, drehung: 90, liegt: true} : lage} noaX={PLATZ.noa} spiegeln schnur={!traurig} />
<Figur pose={[[0, 'noa_A_drachenschnur'], [z.n1.start, 'noa_B1_traurig'], [z.p1.ende, 'noa_A_drachenschnur']]} x={PLATZ.noa} y={BODEN} spiegeln stauchY={atmen(f, 2)} />
<Figur pose={[[0, 'pino_A6_blick-rechts'], [z.n1.start, 'pino_B1_traurig'], [z.p1.start, 'pino_A6_blick-rechts'], [z.e4.start, 'pino_A3_lachen']]} x={PLATZ.pino} y={BODEN} stauchY={atmen(f, 1, 0.015)} />
<Figur pose={[[0, 'pino_A6_blick-rechts'], [z.plumps.start + 20, 'pino_A4_staunen'], [z.n1.start, 'pino_A6_blick-rechts'], [z.e2.start + 20, 'pino_B1_traurig'], [z.p1.start, 'pino_A6_blick-rechts'], [z.e4.start, 'pino_A3_lachen']]} x={PLATZ.pino} y={BODEN} stauchY={atmen(f, 1, 0.015)} />
</Kamera>
<Vignette />
<Untertitel zeilen={S3.liste} />

View file

@ -22,8 +22,6 @@ export const C9_UNTEN = 105;
export const c9 = (bilder: number) => (bilder * 30) / 24 / C9_TEMPO;
const MAUL_UNTEN = luluMaulC9(C9_UNTEN);
export const DRACHEN_IM_GRAS = {x: punkt('lulu', PLATZ.lulu, LULU_Y, MAUL_UNTEN.cx, MAUL_UNTEN.cy).x, y: BODEN - 40};
// In der Pose lulu_A_apfel hält Lulu den Apfel bei 574/193 (Leinwand) – dort hält sie jetzt den Drachen
export const DRACHEN_IM_MAUL = punkt('lulu', PLATZ.lulu, LULU_Y, 574.5, 193);
// In der Pose noa_A_haende-oben sind die Fäustlinge um 674/218 – der Drachen liegt dazwischen
export const drachenUeberNoa = (noaX: number) => punkt('noa', noaX, BODEN, 674.5, 80); // über dem Kopf, nicht vor dem Gesicht
@ -82,9 +80,10 @@ export const SchnurUndDrachen: React.FC<{lage: DrachenLage; noaX: number; spiege
);
};
// Lulu holt den Drachen aus dem Gras und hält ihn mit dem Maul hoch (wie den Apfel in Folge 1):
// Hals runter (Clip C9 vorwärts), Drachen ins Maul, Hals hoch (Clip rückwärts), dann die Pose
// lulu_A_apfel – der Drachen liegt genau über dem gemalten Apfel. Die Schnur hält immer Noa.
// Lulu holt den Drachen aus dem Gras und hält ihn mit dem Maul hoch: Hals runter (Clip C9 vorwärts),
// Drachen ins Maul, Hals hoch (Clip rückwärts, bleibt auf dem ersten Clipbild stehen). Der Drachen hängt
// die ganze Zeit an seiner oberen Spitze im Maul. Keine Pose lulu_A_apfel: dort ist der Apfel gemalt.
// Die Schnur hält immer Noa.
export const hebenPlan = (start: number) => {
const unten = start + c9(C9_UNTEN - C9_START);
const hoch = unten + 10;
@ -94,12 +93,14 @@ export const hebenPlan = (start: number) => {
export const drachenBeiLulu = (f: number, plan: ReturnType<typeof hebenPlan>): DrachenLage => {
if (f < plan.unten) return {x: DRACHEN_IM_GRAS.x, y: BODEN - 36, drehung: 90, liegt: true};
if (f >= plan.oben) return {x: DRACHEN_IM_MAUL.x, y: DRACHEN_IM_MAUL.y + 95, drehung: -15};
const bild = f < plan.hoch ? C9_UNTEN : C9_UNTEN - ((f - plan.hoch) * 1.25 * 24) / 30;
const bild = f < plan.hoch ? C9_UNTEN : Math.max(0, C9_UNTEN - ((f - plan.hoch) * 1.25 * 24) / 30);
const m = luluMaulC9(bild);
const maul = punkt('lulu', PLATZ.lulu, LULU_Y, m.cx, m.cy);
// am Maul hängt der Drachen an seiner oberen Spitze, also unter dem Maul (nicht vor dem Gesicht)
return {x: maul.x, y: maul.y + 95, drehung: -15 * Math.min(1, Math.max(0, (f - plan.hoch) / 20))};
// Die obere Spitze (42 px über dem Leistenkreuz) steckt im Maul. Beim Hochheben kippt der Drachen
// nach vorn (Lulu schaut nach links), damit er ihr Gesicht nicht verdeckt.
const w = 35 * Math.min(1, Math.max(0, (f - plan.hoch) / 40));
const r = (w * Math.PI) / 180;
return {x: maul.x - 40 * Math.sin(r), y: maul.y + 40 * Math.cos(r), drehung: w};
};
// `danach`: was Lulu nach dem Loslassen zeigt ('wind' = Schal-Clip) – nie die Apfel-Pose ohne Drachen!
@ -109,5 +110,7 @@ export const LuluHebt: React.FC<{plan: ReturnType<typeof hebenPlan>; danach?: st
if (f < plan.hoch) return <ClipFigur name="lulu_C9_hals-runter" start={plan.start - c9(C9_START)} tempo={1.25} bis={C9_UNTEN / 24} x={PLATZ.lulu} y={LULU_Y} />;
if (f < plan.oben) return <ClipFigur name="lulu_C9_hals-runter" start={plan.hoch} tempo={1.25} bis={C9_UNTEN / 24} rueckwaerts x={PLATZ.lulu} y={LULU_Y} />;
if (danach === 'wind') return <LuluImWind />;
return danach ? <LuluImWind pose={danach} /> : <LuluImWind pose="lulu_A_apfel" />;
if (danach) return <LuluImWind pose={danach} />;
// solange sie den Drachen hält: Hals oben, letztes Bild des rückwärts laufenden Clips
return <ClipFigur name="lulu_C9_hals-runter" start={plan.hoch} tempo={1.25} bis={C9_UNTEN / 24} rueckwaerts x={PLATZ.lulu} y={LULU_Y} />;
};