J'ai des souris qui cherchent et marchent dans mon jeu, mais elles sont très lentes et difficiles à utiliser. Je pense que c'est parce que j'utilise une vitesse fixe. J'ai entendu dire que dans les grands projets, les développeurs utilisent le temps delta. Comment calculer le temps delta en surabondance? Comment calculer la vitesse en utilisant le temps delta?
14
Réponses:
Le "temps delta" était le temps écoulé entre deux mises à jour de trame (mais il peut également être utilisé dans d'autres contextes; c'est généralement le résultat d'une soustraction de temps).
Vous pouvez obtenir le temps delta dans glut en utilisant la méthode glutGet et le paramètre GLUT_ELAPSED_TIME, ainsi que certaines opérations.
La ligne suivante renvoie le nombre de millisecondes depuis l'appel de glutInit (ou le premier appel à glutGet (GLUT_ELAPSED_TIME)):
Donc, si vous enregistrez le timeSinceStart actuel à chaque boucle de rendu, vous pouvez connaître le deltaTime en soustrayant l'ancien au nouveau.
Vous pouvez également le faire presque de la même manière, en utilisant la bibliothèque ctime C / C ++ avec clock () et l'expression de constante macro CLOCKS_PER_SEC qui spécifie la relation entre un tick d'horloge et une seconde.
Fondamentalement, vous pouvez utiliser deltaTime pour mettre à jour vos mouvements par rapport à ce temps écoulé au lieu d'utiliser une valeur de temps fixe. De cette façon, la vitesse de déplacement de votre personnage devrait être presque la même si votre programme tourne à 60 fps ou s'il tourne à 10 fps.
Voici un petit exemple: supposons que vous vouliez déplacer quelque chose de 10 unités par seconde sur l'axe x. Vous pourriez faire quelque chose comme ça (si deltaTime utilise en effet des millisecondes).
De cette façon, que votre programme soit mis à jour 2 fois ou 100 fois, 1 seconde plus tard, la position devrait être presque la même, et le jeu est moins impacté par les faibles fps d'un petit ordinateur que s'il utilise des valeurs fixes.
Avec des valeurs fixes ==> fps faibles = moins de mises à jour = mouvements lents alors que fps élevés = plus de mises à jour = mouvements très rapides.
Avec deltaTime ==> "presque" les mêmes mouvements.
Enfin, vous devriez lire Pas de temps fixe vs Pas de temps variable sur gamedev.stackexchange.
la source
positive int
aller généralement jusqu'à 2.147.483.647 si signé et jusqu'à 4.294.967.295 si non signé ... donc même si nous considérons le plus petit, 2.147.483.647 millisecondes est presque 25 jours ... Il devrait être assez suffisant pour gérer la plupart des jeux minuteries et même si cela ne suffit pas, nous pouvons toujours raisonnablement utiliserunsigned int
(~ 50 jours) ou même unlong long
(comme je le fais habituellement).QueryPerformanceCounter
sur Windows etgettimeofday
sur la plupart des autres. Vous allez devoir vous salir les mains et viser un peu plus que le dénominateur le moins commun des API de plate-forme, en particulier en C et C ++.