Idle and Physics Processing¶
Игра запускается в цикле. Каждый кадр вам необходимо обновлять состояние вашего игрового мира перед тем, как отрисовать его на экране. Godot поддерживает два виртуальных метода в классе Node, чтоб сделать это: Node._process() и Node._physics_process(). если вы определите один или оба в скрипте, движок будет вызывать их автоматически.
Существует два типа обработки, которые доступны вам:
Idle processing позволяет вам запускать код, который обновляет узел каждый кадр, так часто, как это возможно.
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
public override void _Process(float delta)
{
// Do something...
}
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_process()
. Используйте её для вычислений, которые должны происходить перед каждым шагом физики, например, для перемещения персонажа, который сталкивается с игровым миром. Как упоминалось выше, _physics_process()
выполняется с фиксированными временными интервалами, насколько это возможно, чтобы сохранить стабильность физических взаимодействий. Вы можете изменить интервал между шагами физики в Настройках проекта, в разделе Physics -> Common -> Physics Fps По умолчанию он установлен на 60 раз в секунду.
The engine calls this method every time it draws a frame:
func _physics_process(delta):
# Do something...
pass
public override void _PhysicsProcess(float delta)
{
// Do something...
}
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.
public class CustomLabel : Label
{
private float _time;
public override void _Process(float delta)
{
_time += delta;
Text = _time.ToString(); // 'Text' is a built-in Label property.
}
}
When you run the scene, you should see a counter increasing each frame.