Ich habe gehört, dass Sie die Deltazeit mit zwei Funktionen berechnen können, die als SDL_GetPerformanceCounter und SDL_GetPerformanceFrequency bezeichnet werden. Ich bin nicht sicher, wie sie vollständig funktionieren, aber ich habe gehört, dass es ein bisschen ähnlich ist wie die Verwendung von 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**/
}
Ich habe diesen Code, aber wenn ich deltaTime drucke oder versuche, ihn zu verwenden, entspricht er immer einigen wirklich zufälligen und verrückten Zahlen. Ist das richtig?
Antworten:
Beim Lesen des von SDL bereitgestellten Codebeispiels in SDL_GetPerformanceFrequency konnte ich leicht herausfinden, wie Sie mit diesen Funktionen eine Deltatime berechnen können.
Grundsätzlich sollte es für Sie darauf ankommen:
Hinweis: Der erste Frame hat immer eine Deltatime von 0 oder etwas sehr Nahes
Dies sollte den Wert deltaTime in Millisekunden füllen. Dies kann leicht in Sekunden umgewandelt werden, indem das Endergebnis mit 0,001 multipliziert wird.
Referenz: https://wiki.libsdl.org/SDL_GetPerformanceFrequency
quelle
deltaTime = ((NOW - LAST)*1000 / (double)SDL_GetPerformanceFrequency() );
da dies ein Klemmen der Zahl aufgrund der Ganzzahldivision vermeidet.Die Art und Weise, wie ich die Deltazeit berechnet habe, war über
SDL_GetTicks()
:Dann kreuze ich einfach eine
Clock
Instanz in der Hauptschleife an.quelle