Idle and Physics Processing

Игра запускается в цикле. Каждый кадр вам необходимо обновлять состояние вашего игрового мира перед тем, как отрисовать его на экране. Godot поддерживает два виртуальных метода в классе Node, чтоб сделать это: Node._process() и Node._physics_process(). если вы определите один или оба в скрипте, движок будет вызывать их автоматически.

Существует два типа обработки, которые доступны вам:

  1. Idle processing позволяет вам запускать код, который обновляет узел каждый кадр, так часто, как это возможно.

  2. Physics processing происходит с фиксированной скоростью, 60 раз в секунду по умолчанию. Это не зависит от фактической частоты кадров в вашей игре и обеспечивает бесперебойную обработку физики. Вы должны использовать это для всего, что предполагает использование физического движка, как например движение тел, которые сталкиваются с окружением.

You can activate idle processing by defining the _process() method in a script. You can turn it off and back on by calling Node.set_process().

The engine calls this method every time it draws a frame:

func _process(delta):
    # Do something...
    pass

Keep in mind that the frequency at which the engine calls _process() depends on your application's framerate, which varies over time and across devices.

The function's delta parameter is the time elapsed in seconds since the previous call to _process(). Use this parameter to make calculations independent of the framerate. For example, you should always multiply a speed value by delta to animate a moving object.

Physics processing works with a similar virtual function: _physics_process(). Use it for calculations that must happen before each physics step, like moving a character that collides with the game world. As mentioned above, _physics_process() runs at fixed time intervals as much as possible to keep the physics interactions stable. You can change the interval between physics steps in the Project Settings, under Physics -> Common -> Physics Fps. By default, it's set to run 60 times per second.

The engine calls this method every time it draws a frame:

func _physics_process(delta):
    # Do something...
    pass

The function _process() is not synchronized with physics. Its rate depends on hardware and game optimization. It also runs after the physics step in single-threaded games.

You can see the _process() function at work by creating a scene with a single Label node, with the following script attached to it:

extends Label

var time = 0

func _process(delta):
    time += delta
    text = str(time) # 'text' is a built-in Label property.

When you run the scene, you should see a counter increasing each frame.