Le plus grand succès des moteurs de jeu concurrentiel comme id Tech
, GoldSrc
, Source
et permettent par exemple des limitations framerate.
Vous pouvez jouer avec 30, avec 60, avec 99, avec 72, avec 68 etc. En bref, vous pouvez le plafonner et contrôler le plafond.
Je me demandais, comment puis-je limiter le framerate?
Pas intéressé par le code, mais la théorie.
frame-rate
joltmode
la source
la source
Réponses:
La théorie est la suivante: vérifiez la dernière fois que vous avez rendu une image, et s'il n'est pas encore temps de dessiner une autre image, alors ne le faites pas et attendez qu'elle soit.
la source
Supposons que vous souhaitiez limiter votre fréquence d'images à 60 images par seconde, cela signifie que chaque image a un temps de rendu de 1 / 60s = 16,67 ms (arrondi)
Pour limiter votre fréquence d'images, il vous suffit de vérifier l'heure au début de votre boucle de jeu, vous pouvez ensuite la comparer avec l'heure à la fin de la boucle de jeu: si la différence est inférieure à 16,67 ms, vous devez caler pendant ce temps.
Pour ce faire, vous pouvez utiliser:
Cependant, puisque
sleep(x)
donne le fil pour un minimum dex
millisecondes, vous ne savez pas avec certitude si vous reprendrez le contrôle dans le temps.Une meilleure façon serait d'utiliser:
Cela renvoie le fil et demande le contrôle dès que possible.
Une autre solution consiste à avoir juste une boucle d'attente occupée, cela vous donne le meilleur contrôle mais utilise le processeur inutilement.
N'oubliez pas que le planificateur du système d'exploitation peut toujours prendre le contrôle de votre thread, alors préparez-vous à certaines fluctuations.
la source