J'ai entendu dire que vous pouvez calculer le temps delta avec deux fonctions appelées SDL_GetPerformanceCounter et SDL_GetPerformanceFrequency. Je ne sais pas comment ils fonctionnent complètement, mais j'ai entendu dire que c'était un peu similaire à l'utilisation de SDL_GetTicks ()
Uint64 NOW, LAST;
double deltaTime = 0;
while (somebool)
{
LAST = SDL_GetPerformanceCounter();
NOW = SDL_GetPerformanceCounter();
LAST = NOW;
deltaTime = (NOW - LAST) / (double)SDL_GetPerformanceFrequency();
/**Rendering**/
}
J'ai ce code mais chaque fois que j'imprime deltaTime ou essaie de l'utiliser, il équivaut toujours à des nombres vraiment aléatoires et insensés. Est-ce correct?
Réponses:
En lisant l'exemple de code fourni par SDL sur SDL_GetPerformanceFrequency, j'ai pu facilement découvrir comment calculer un deltatime à l'aide de ces fonctions.
Cela devrait se résumer à ceci pour vous:
Remarque: la première image aura toujours un deltatime de 0 ou quelque chose de très proche
Cela devrait remplir la valeur deltaTime en millisecondes, cela peut facilement être converti en secondes en multipliant le résultat final par 0,001.
Référence: https://wiki.libsdl.org/SDL_GetPerformanceFrequency
la source
deltaTime = ((NOW - LAST)*1000 / (double)SDL_GetPerformanceFrequency() );
car cela évite de bloquer le nombre en raison de la division entière.Leur façon de calculer le temps delta a été via
SDL_GetTicks()
:Ensuite, je coche simplement une
Clock
instance dans la boucle principale.la source