Konfetti-Flackern beheben: Burst nicht bei jedem Timer-Tick neu starten
This commit is contained in:
parent
35564602b2
commit
7896803100
|
|
@ -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<typeof setTimeout> | 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);
|
||||
});
|
||||
</script>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user