Halten Sie die Einheiten im Code sichtbar
Wählen Sie eine Zeiteinheit und verwenden Sie sie konsequent. Wird die Geschwindigkeit in Pixeln pro Sekunde und Delta in Sekunden angegeben, bewegt sich die Position um Geschwindigkeit × Delta weiter. Eine nützliche manuelle Prüfung: Bewegen Sie einen Marker zehn Sekunden lang mit 80 Pixeln pro Sekunde. Er sollte unabhängig von der Zahl der Renderdurchläufe etwa 800 Pixel in der Spielwelt zurücklegen.
Mischen Sie Millisekunden aus performance.now() nicht mit einer Geschwindigkeit pro Sekunde, ohne durch 1.000 zu teilen. Benennen Sie Werte samt Einheit, etwa deltaSeconds oder speedPixelsPerSecond, damit eine spätere Anpassung eine kleine Bewegung nicht unbemerkt vertausendfacht.
Die Auswirkungen einer langen Verzögerung begrenzen
Begrenzen Sie Delta in einem einfachen Actionspiel auf einen bewusst gewählten Höchstwert und nehmen Sie in Kauf, dass die Simulation bei starker Belastung kurz langsamer wird. Für eine Physiksimulation mit reproduzierbaren Schritten sammeln Sie Zeit und schreiten in festen Intervallen voran. Begrenzen Sie die Zahl der Nachholschritte, damit die Wiederherstellung die Seite nicht blockiert. Die Ansätze haben unterschiedliche Kompromisse; wählen Sie passend zum Spielgefühl und den Regeln.
Testen Sie mit einer künstlichen Pause zwischen Aktualisierungen und vergleichen Sie eine geradlinige Bewegung mit einer Kollision am Ende des Wegs. Durchdringt das Objekt ein dünnes Hindernis, können kleinere Teilschritte oder eine Swept-Collision-Prüfung nötig sein. Eine andere Bildrate allein behebt dieses Problem in der Spiellogik nicht.
Fragen zu Delta Time in Spielen
Macht die Deltazeit die Physik deterministisch?
Nein. Variable Aktualisierungsintervalle können dennoch zu unterschiedlichen Integrationsergebnissen führen. Ein fester Simulationsschritt verbessert die Wiederholbarkeit, obwohl Eingabezeit und Gleitkommadetails immer noch wichtig sind.
Welche Uhr soll die verstrichene Zeit liefern?
Verwenden Sie den Zeitstempel des Animations-Callbacks oder performance.now(); MDN beschreibt beide als hochauflösende Zeitquellen. Verwenden Sie für kurze Frame-Abstände keine Kalenderdaten, denn Änderungen der Systemuhr haben nichts mit der Simulationszeit zu tun.
Weiterlesen
Etwas nicht mehr aktuell? Korrektur melden