Accumulez le temps écoulé et exécutez des mises à jour limitées
Dans chaque rappel d'animation, ajoutez le temps écoulé à un accumulateur. Pendant que l'accumulateur contient au moins une étape, mettez à jour la physique selon un intervalle constant tel que 1/60 de seconde et soustrayez cet intervalle. Rendez ensuite le dernier état. Définir un nombre maximum d'étapes de rattrapage par image ; sinon, une longue pause peut entraîner un retard important qui prend plus de temps et aggrave le retard. Décidez explicitement si le temps excédentaire est supprimé, plafonné ou géré par une autre règle de récupération.
Gardez les unités cohérentes. Si la vitesse est mesurée en unités du monde du jeu par seconde, multipliez-la par le pas fixe dans chaque mise à jour de simulation. Ne multipliez pas la même vitesse par le temps écoulé complet de l'image et n'exécutez pas également plusieurs mises à jour fixes, sinon le mouvement sera compté deux fois.
Gérer la saisie et le rendu selon leurs propres limites
Échantillonnez les entrées conservées pour chaque étape de simulation ou mettez en file d’attente les actions ponctuelles jusqu’à ce qu’une étape les consomme. Si une pression sur une touche se produit entre deux images, assurez-vous qu'elle n'est pas perdue avant la prochaine mise à jour. Le rendu peut interpoler entre les états physiques, tandis que les collisions et les scores utilisent l'état de simulation. MDN décrit requestAnimationFrame comme un rappel ponctuel planifié avant de repeindre et conseille d'utiliser son horodatage pour calculer la progression ; un accumulateur utilise cet horodatage pour maintenir les mises à jour à pas fixe.
Testez les limites de la boucle
Comparez le même mouvement court et la même collision sur des images ordinaires, une image lente simulée et une pause plus longue. Vérifiez qu'un joueur ne traverse pas un mur mince, ne gagne pas de vitesse supplémentaire après un blocage de la boucle ou ne déclenche pas de collision plusieurs fois lors du rattrapage. Testez la pause et le retour des onglets cachés selon la règle que vous envisagez. Si la boucle à pas fixes rend la simulation stable mais qu'une collision échoue toujours à grande vitesse, utilisez une méthode de collision adaptée au mouvement plutôt que d'augmenter la fréquence de rendu.
Questions sur physique du jeu à pas de temps fixe
Un pas de temps fixe garantit-il une physique déterministe ?
Non. Cela rend l'intervalle de simulation cohérent, mais le timing des entrées, les mathématiques et l'ordre des collisions peuvent toujours produire des variations. Contrôlez-les séparément pour les tests qui nécessitent une relecture.
Pourquoi limiter les mises à jour de rattrapage après un blocage du frame ?
Sans limite, le rattrapage peut monopoliser les images ultérieures et aggraver le retard. Choisissez et testez une politique de récupération adaptée au jeu, notamment si le temps simulé peut être ignoré.
Pour aller plus loin
Vous avez repéré une information dépassée ? Signaler une correction