Die "Delta-Zeit" war die Zeit, die zwischen zwei Frame-Aktualisierungen verstrichen ist (sie kann jedoch auch in anderen Kontexten verwendet werden; dies ist normalerweise das Ergebnis einer Zeitsubtraktion).
Sie können die Deltazeit in glut mit der Methode glutGet und dem Parameter GLUT_ELAPSED_TIME sowie einigen Operationen abrufen.
Die folgende Zeile gibt die Anzahl der Millisekunden seit dem Aufruf von glutInit (oder dem ersten Aufruf von glutGet (GLUT_ELAPSED_TIME)) zurück:
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
Wenn Sie also die aktuelle timeSinceStart bei jeder Rendering-Schleife registrieren, können Sie die deltaTime ermitteln, indem Sie die alte von der neuen subtrahieren.
int oldTimeSinceStart = 0;
while( ... )
{
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
int deltaTime = timeSinceStart - oldTimeSinceStart;
oldTimeSinceStart = timeSinceStart;
//... stuff to update using deltaTime
}
Sie können dies auch fast auf die gleiche Weise tun, indem Sie die C / C ++ - Zeitbibliothek mit clock () und den Makrokonstantenausdruck CLOCKS_PER_SEC verwenden , der die Beziehung zwischen einem Takt und einer Sekunde angibt.
Grundsätzlich können Sie deltaTime verwenden, um Ihre Bewegungen im Verhältnis zu dieser abgelaufenen Zeit zu aktualisieren, anstatt einen festen Zeitwert zu verwenden. Auf diese Weise sollte die Bewegungsgeschwindigkeit Ihres Charakters nahezu gleich sein, wenn Ihr Programm mit 60 fps oder mit 10 fps ausgeführt wird.
Hier ist ein kleines Beispiel: Angenommen, Sie möchten etwas um 10 Einheiten pro Sekunde auf der x-Achse verschieben. Sie könnten so etwas tun (wenn DeltaTime tatsächlich Millisekunden verwendet).
Position.x += 10/1000 * deltaTime;
Unabhängig davon, ob Ihr Programm 2-mal oder 100-mal aktualisiert wurde, sollte die Position 1 Sekunde später nahezu gleich sein, und das Gameplay wird durch die niedrigen FPS eines kleinen Computers weniger beeinträchtigt als bei Verwendung fester Werte.
Mit festen Werten ==> niedrige fps = weniger Updates = langsame Bewegungen, während hohe fps = mehr Updates = sehr schnelle Bewegungen.
Mit DeltaTime ==> "fast" die gleichen Bewegungen.
Schließlich sollten Sie auf gamedev.stackexchange Fixed time step vs Variable time step lesen .