Cartello d'apertura «Manzolo (Poca) Art Presents»; il primo fotogramma non congela più il gioco
Il cartello dura 5 secondi prima del titolo e si salta con un clic o un tasto; il test nel browser lo controlla. Il primo timestamp di requestAnimationFrame può precedere quello del caricamento: il dt negativo dava alla musica un volume sotto zero, il browser lanciava un errore e il ciclo dei fotogrammi si fermava (una volta su tre nella prova in orizzontale). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UdeKd62opy9PKgpQXtVctF
This commit is contained in:
+19
-3
@@ -187,9 +187,11 @@ function updateUi() {
|
||||
|
||||
let last = performance.now();
|
||||
function frame(now) {
|
||||
const dt = Math.min(0.1, (now - last) / 1000);
|
||||
// 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).
|
||||
const dt = Math.max(0, Math.min(0.1, (now - last) / 1000));
|
||||
last = now;
|
||||
const screen = !$('title').hidden ? 'title' : !$('intro').hidden ? 'intro' : !$('ending').hidden ? 'ending' : 'game';
|
||||
const screen = !$('title').hidden || !$('splash').hidden ? 'title' : !$('intro').hidden ? 'intro' : !$('ending').hidden ? 'ending' : 'game';
|
||||
music.update(trackFor(story, { screen, scene: game?.state.scene }), dt);
|
||||
if (game) {
|
||||
if (running) game.update(dt);
|
||||
@@ -204,8 +206,22 @@ $('continue').addEventListener('click', () => start(readSave(storage)));
|
||||
$('restart').addEventListener('click', () => { if (storage) clearSave(storage); start(null); });
|
||||
|
||||
// Dietro il titolo si vede già la piazza.
|
||||
// --- Cartello d'apertura «Manzolo (Poca) Art Presents»: 5 secondi (un clic o un tasto lo salta), poi il titolo.
|
||||
function showSplash() {
|
||||
let done = false;
|
||||
const end = () => {
|
||||
if (done) return;
|
||||
done = true;
|
||||
$('splash').hidden = true;
|
||||
showTitle();
|
||||
};
|
||||
setTimeout(end, 5000);
|
||||
$('splash').addEventListener('click', end);
|
||||
addEventListener('keydown', end, { once: true });
|
||||
}
|
||||
|
||||
game = new Game(story);
|
||||
command = new Command(game);
|
||||
showTitle();
|
||||
showSplash();
|
||||
requestAnimationFrame(frame);
|
||||
loadAssets(story).then(ok => { if (ok.includes(false)) console.warn('Alcune immagini non sono state caricate.'); });
|
||||
|
||||
Reference in New Issue
Block a user