Est-il sûr d'utiliser la fonction Sleep () sous Windows dans la boucle de jeu (C ++)? Je veux avoir une fréquence d'images fixe.
Est-il sûr d'utiliser la fonction Sleep () sous Windows dans la boucle de jeu (C ++)? Je veux avoir une fréquence d'images fixe.
Réponses:
Non ce n'est pas. Le sommeil ne garantit qu'un temps minimum pour dormir, mais il peut en fait dormir pendant une durée arbitraire au-delà. La résolution de votre minuterie (définie via timeBeginPeriod) est également importante pour cela, et même si vous utilisez autre chose (comme QueryPerformanceCounter) pour votre minuterie, vous avez toujours besoin de timeBeginPeriod pour contrôler le sommeil.
Donc en résumé:
Le seul cas raisonnable pour utiliser Sleep serait si vous vouliez réduire l'utilisation du processeur, par exemple pour les appareils mobiles. Même alors, vous utiliseriez Sleep (1); l'utiliser pour contrôler les framerates n'est pas la voie à suivre.
Forcer vsync sur est probablement un moyen courant d'obtenir un taux de rafraîchissement fixe, mais même dans ce cas, différents matériels fonctionneront à des taux de rafraîchissement différents et vous ne pourrez pas avoir un taux de rafraîchissement fixe cohérent sur différentes machines (cela dépend du type de matériel vous visez bien sûr).
À ce stade, il est nécessaire de mentionner cet article: Gaffer On Games - Fix Your Timestep! . Cela décrit les étapes dont vous avez besoin pour obtenir un pas de temps cohérent dans votre simulation.
Réponse courte: non, ce n'est pas le cas.
Pour avoir une fréquence d'images fixe, vous devez appeler une certaine fonction de rappel qui force une fréquence d'images spécifique. De toute évidence, si vous ne savez pas combien de temps prendra une seule itération dans une boucle, vous ne pouvez pas définir un temps de sommeil fixe.
GLUT fournit glutTimerFunc () , qui est, si vous programmez en OpenGL, la bonne fonction dont vous avez besoin. Jetez un oeil à cet exemple , ou celui- ci.
Sleep
?