Ich habe Mäuse, die in meinem Spiel schauen und laufen, aber sie sind sehr langsam und schwer zu bedienen. Ich denke, das liegt daran, dass ich eine feste Geschwindigkeit benutze. Ich habe gehört, dass Entwickler in großen Projekten Delta-Zeit verwenden. Wie berechne ich die Deltazeit in Glut? Wie berechne ich die Geschwindigkeit mit Delta-Zeit?
13
Antworten:
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:
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.
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).
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 .
quelle
positive int
Anstieg auf 2.147.483.647, wenn signiert, und auf 4.294.967.295, wenn nicht signiert. Selbst wenn wir den kleineren betrachten, sind 2.147.483.647 Millisekunden fast 25 Tage. Es sollte für die meisten Spiele ausreichen Timer und selbst wenn es nicht genug ist, können wir noch vernünftigerweiseunsigned int
(~ 50 Tage) oder sogar einenlong long
(wie ich es normalerweise tue) verwenden.QueryPerformanceCounter
für Windows und diegettimeofday
meisten anderen zu schreiben . Sie müssen sich die Hände schmutzig machen und etwas mehr als den kleinsten gemeinsamen Nenner von Plattform-APIs anstreben, insbesondere in C und C ++.