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?
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
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de
delay
/wait
en JavaScript. Vous pouvez utiliser des fonctions commewindow.setTimeout
pour appeler une fonction après un certain temps s'est écoulé, exemple:Ou dire que vous voulez peindre une image toute les 33 ms (~30 ips), vous aurez un code comme:
window.setInterval
plutôt quewindow.setTimeInterval
.Désolé. La corriger.
OriginalL'auteur closure