0

ここには、draw() で次をレンダリングするゲーム ループがあります。望ましい目標は、ゲームがキャンバスをクリアし、「ゲーム オーバー」と言ってから、リセットして新しいゲームを続行する前に 3 秒間一時停止することです。ただし、「ゲームオーバー」をクリアして描画するのではなく、既存のゲームを 3 秒間一時停止するだけのようです。何が問題なのですか?

    // check for game over - failed
    if (ball_y + ball_dy + ball_radius> HEIGHT-20)
    {
        game_end_start_time = new Date().getTime();

         while (new Date().getTime() - game_end_start_time < 3000)
         {

            clear();  // calls  ctx.clearRect(0, 0, WIDTH, HEIGHT);

            fillColorValue(COLOR_GREEN);
            drawFont("G A M E   O V E R", WIDTH/2-80, HEIGHT/2);

         }

        resetGame();  
        return;
    }  
4

2 に答える 2

2

JavaScript コードは UI スレッドで実行されます。したがって、基本的にブラウザは、コードの実行が完了するまで描画できません。3 秒間ループしているだけなので、ブラウザが何もしないようにブロックしているだけです。

ゲームオーバー画面を描画し、 を使用setTimeout(function(){resetGame();}, 3000);して 3 秒後に新しいゲームを再開してみてください。

于 2012-07-08T07:59:18.040 に答える
0

Javascriptでレンダリングループ(アニメーションループ)を書く方法:

http://hacks.mozilla.org/2011/08/animation-with-javascript-from-setinterval-to-requestanimationframe/

于 2012-07-08T10:08:30.170 に答える