He oído que puede calcular el tiempo delta con dos funciones llamadas SDL_GetPerformanceCounter y SDL_GetPerformanceFrequency. No estoy seguro de cómo funcionan por completo, pero escuché que es un poco similar al uso 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**/
}
Tengo este código, pero cada vez que imprimo deltaTime o intento usarlo, siempre es igual a algunos números realmente aleatorios y locos. ¿Es esto correcto?
Respuestas:
Al leer el ejemplo de código proporcionado por SDL en SDL_GetPerformanceFrequency, podría descubrir fácilmente cómo puede calcular un tiempo delta utilizando estas funciones.
Básicamente debería ser todo para ti:
Nota: el primer cuadro siempre tendrá un tiempo delta de 0 o algo muy cercano
Esto debería llenar el valor deltaTime en milisegundos, esto se puede convertir fácilmente a segundos multiplicando el resultado final con 0.001.
Referencia: https://wiki.libsdl.org/SDL_GetPerformanceFrequency
fuente
deltaTime = ((NOW - LAST)*1000 / (double)SDL_GetPerformanceFrequency() );
ya que esto evita sujetar el número debido a la división entera.La forma en que me he dedicado a calcular el tiempo delta ha sido a través de
SDL_GetTicks()
:Luego, simplemente marco una
Clock
instancia en el bucle principal.fuente