From 789680310002cc7a1729fcea0350e0ffcb7963af Mon Sep 17 00:00:00 2001 From: schmop Date: Sun, 31 May 2026 22:35:28 +0200 Subject: [PATCH] Konfetti-Flackern beheben: Burst nicht bei jedem Timer-Tick neu starten --- src/lib/components/game/BurstFx.svelte | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/lib/components/game/BurstFx.svelte b/src/lib/components/game/BurstFx.svelte index 2cf1ded..627885d 100644 --- a/src/lib/components/game/BurstFx.svelte +++ b/src/lib/components/game/BurstFx.svelte @@ -9,7 +9,16 @@ const PALETTE = ['#ff5555', '#ffa84a', '#ffe34a', '#6cdc6c', '#4ab3ff', '#b06cff']; + // triggerKey kommt von $game.stageBumpKey — das Lesen abonniert (Svelte 5) den ganzen + // game-Store, daher feuert dieser Effekt bei JEDEM Timer-Tick (~60×/s). Ohne Wertvergleich + // würde er die Partikel jede Frame neu erzeugen und die fly-Animation endlos bei 0% neu + // starten → flackernde Punkte in der Mitte. Nur bei echtem Wechsel von triggerKey auslösen. + let prevTrigger = 0; + let hideTimer: ReturnType | null = null; + $effect(() => { + if (triggerKey === prevTrigger) return; + prevTrigger = triggerKey; if (triggerKey === 0) return; counter++; const seed = counter; @@ -21,10 +30,16 @@ size: 8 + Math.random() * 8, })); active = true; - const timeout = setTimeout(() => { + if (hideTimer) clearTimeout(hideTimer); + hideTimer = setTimeout(() => { active = false; }, 700); - return () => clearTimeout(timeout); + }); + + // Timer beim Verlassen aufräumen (der Effekt oben kehrt meist früh zurück und gibt + // selbst keine Cleanup-Funktion mehr zurück). + $effect(() => () => { + if (hideTimer) clearTimeout(hideTimer); });