Ouvi dizer que você pode calcular o tempo delta com duas funções chamadas SDL_GetPerformanceCounter e SDL_GetPerformanceFrequency. Não tenho certeza de como eles funcionam completamente, mas ouvi dizer que é um pouco semelhante ao 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**/
}
Eu tenho esse código, mas sempre que imprimo o deltaTime ou tento usá-lo, sempre é igual a alguns números realmente aleatórios e insanos. Isso está correto?
Respostas:
Ao ler o exemplo de código fornecido pelo SDL no SDL_GetPerformanceFrequency, pude descobrir com facilidade como você pode calcular um tempo de delta usando essas funções.
Basicamente, tudo se resume a isso para você:
Nota: o primeiro quadro sempre terá um tempo de delt de 0 ou algo muito próximo a ele
Isso deve preencher o valor deltaTime em milissegundos. Isso pode ser facilmente convertido em segundos, multiplicando o resultado final por 0,001.
Referência: https://wiki.libsdl.org/SDL_GetPerformanceFrequency
fonte
deltaTime = ((NOW - LAST)*1000 / (double)SDL_GetPerformanceFrequency() );
uma vez que isso evita fixar o número devido à divisão inteira.Do jeito que eu calculei o tempo de delta, foi através de
SDL_GetTicks()
:Simplesmente marque uma
Clock
instância no loop principal.fonte