Javascript minuterie de retard

J'ai décidé de jouer avec HTML5 canvas, et bien sûr, cela signifie que je vais essayer d'écrire un jeu de pong. Pour le moment, je suis en train d'essayer de comprendre comment le capuchon de mon framerate. C'est assez facile dans d'autres langues, mais de trouver un moyen de retarder l'exécution de Javascript semble être un peu plus dur.

Voici ce que j'ai à ce jour:

while(true) {
    var begin = (new Date()).getTime();

    //Draw stuff to the canvas

    var end = (new Date()).getTime();
    if ((end-begin) < 33.333 ) {
        //delay (1000/(30-(end-begin)))
    }
}

Évidemment, les vitesses seront très différentes en raison de la façon dont chaque moteur javascript effectue, mais je tiens à le cap le maximum de framerate à 30FPS. Je ne vois vraiment pas comment setTimeout() devrait permettre d'accomplir cette tâche. Quelle serait la meilleure façon de le faire?

Avez-vous essayé setInterval? Il y a certainement des problèmes à connaître, comme une non-linéaire de l'horloge, mais au moins cela vous permet de "veille" un peu.
Découvrez requestAnimationFrame (sur moi), il vous donnera sur un 60ish FPS (ou ce qui convient le mieux au client).
Liées à l'observation ci-dessus: programmers.stackexchange.com/questions/175934/whats-the-best-way-to-use-requestanimationframe-and-fixed-frame-rates

OriginalL'auteur Katherine1 | 2012-12-21