Słyszałem, że możesz obliczyć czas delta za pomocą dwóch funkcji o nazwie SDL_GetPerformanceCounter i SDL_GetPerformanceFrequency. Nie jestem pewien, jak działają całkowicie, ale słyszałem, że jest to trochę podobne do używania 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**/
}
Mam ten kod, ale ilekroć drukuję deltaTime lub próbuję go użyć, zawsze ma on kilka naprawdę losowych i szalonych liczb. Czy to jest poprawne?
Odpowiedzi:
Czytając przykład kodu dostarczony przez SDL na SDL_GetPerformanceFrequency, mogłem łatwo dowiedzieć się, jak obliczyć deltatime za pomocą tych funkcji.
Zasadniczo powinno sprowadzać się do tego:
Uwaga: pierwsza ramka zawsze będzie miała deltatime 0 lub coś bardzo zbliżonego
Powinno to wypełnić wartość deltaTime w milisekundach, można to łatwo przekonwertować na sekundy, mnożąc końcowy wynik przez 0,001.
Odniesienie: https://wiki.libsdl.org/SDL_GetPerformanceFrequency
źródło
deltaTime = ((NOW - LAST)*1000 / (double)SDL_GetPerformanceFrequency() );
ponieważ pozwala to uniknąć zaciśnięcia liczby z powodu podziału na liczby całkowite.Sposób, w jaki poszedłem do obliczania czasu delty, był przez
SDL_GetTicks()
:Następnie po prostu zaznaczam
Clock
wystąpienie w głównej pętli.źródło