Я слышал, что вы можете рассчитать дельта-время с помощью двух функций: SDL_GetPerformanceCounter и SDL_GetPerformanceFrequency. Я не уверен, как они работают полностью, но я слышал, что это немного похоже на использование 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**/
}
У меня есть этот код, но всякий раз, когда я распечатываю deltaTime или пытаюсь использовать его, он всегда равен некоторым действительно случайным и безумным числам. Это верно?
Ответы:
При чтении примера кода, предоставленного SDL на SDL_GetPerformanceFrequency, я мог легко узнать, как можно рассчитать дельта-время с помощью этих функций.
Это должно в основном сводиться к этому для вас:
Примечание: первый кадр всегда будет иметь дельта-время 0 или что-то очень близкое к нему
Это должно заполнить значение deltaTime в миллисекундах, его можно легко преобразовать в секунды, умножив конечный результат на 0,001.
Ссылка: https://wiki.libsdl.org/SDL_GetPerformanceFrequency
источник
deltaTime = ((NOW - LAST)*1000 / (double)SDL_GetPerformanceFrequency() );
так как это позволит избежать зажима числа из-за целочисленного деления.То, как я вычислял время дельты, прошло через
SDL_GetTicks()
:Затем я просто отмечаю
Clock
экземпляр в основном цикле.источник