Lucciole, finestre che si accendono di sera, rondini, cipressi al vento e dissolvenza fra le scene

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ApqNBvNbNCwXqR2RLo8QJh
This commit is contained in:
2026-10-24 23:37:23 +02:00
co-authored by Claude Opus 5.5
parent f64051b5df
commit 6a96611a1b
4 changed files with 76 additions and 6 deletions
+9 -1
View File
@@ -538,7 +538,8 @@ function updateUi() {
}
}
let last = performance.now(), drawnStill = false;
let last = performance.now(), drawnStill = false, fade = 0, fadeScene = null;
const FADE = 0.4; // secondi della dissolvenza fra le scene
function frame(now) {
// Il primo timestamp di requestAnimationFrame può precedere `last`: un dt negativo darebbe alla musica un volume
// sotto zero, il browser lancerebbe un errore e il ciclo dei fotogrammi si fermerebbe (gioco congelato).
@@ -556,6 +557,13 @@ function frame(now) {
if (game && (!still || still !== drawnStill)) {
if (running) game.update(dt);
render(ctx, game, { hover: debug && hoverTarget ? game.hotspot(hoverTarget) : null, spots: running && now < spotsUntil, debug: debugView() });
// Cambiando scena, un attimo di nero che sfuma: la dissolvenza dei vecchi giochi, invece del taglio netto.
if (game.state.scene !== fadeScene) { if (fadeScene) fade = 1; fadeScene = game.state.scene; }
if (fade > 0) {
ctx.fillStyle = `rgba(0, 0, 0, ${fade})`;
ctx.fillRect(0, 0, WIDTH, HEIGHT);
fade = Math.max(0, fade - dt / FADE);
}
updateUi();
}
drawnStill = still;