Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Idle и Physics Processing
Игры работают в цикле. В каждом кадре необходимо обновлять состояние игрового мира перед его отображением на экране. Godot предоставляет для этого два виртуальных метода в классе Node: Node._process() и Node._physics_process(). Если вы определите один или оба метода в скрипте, движок вызовет их автоматически.
Существует два типа обработки, которые доступны вам:
Idle processing позволяет вам запускать код, который обновляет узел каждый кадр, так часто, как это возможно.
Physics processing происходит с фиксированной скоростью, 60 раз в секунду по умолчанию. Это не зависит от фактической частоты кадров в вашей игре и обеспечивает бесперебойную обработку физики. Вы должны использовать это для всего, что предполагает использование физического движка, как например движение тел, которые сталкиваются с окружением.
Вы можете активировать обработку простоя, определив метод _process() в скрипте. Вы можете отключить и включить его, вызвав Node.set_process().
Движок вызывает этот метод каждый раз при отрисовке кадра:
func _process(delta):
# Do something...
pass
public override void _Process(double delta)
{
// Do something...
}
Помните, что частота, с которой движок вызывает _process(), зависит от частоты кадров вашего приложения, которая меняется со временем и на разных устройствах.
Параметр delta функции — это время в секундах, прошедшее с момента предыдущего вызова _process(). Используйте этот параметр, чтобы вычисления не зависели от частоты кадров. Например, для анимации движущегося объекта всегда следует умножать значение скорости на delta.
Обработка физики работает с помощью аналогичной виртуальной функции: _physics_process(). Используйте её для вычислений, которые должны происходить перед каждым шагом физики, например, для перемещения персонажа, который сталкивается с игровым миром. Как упоминалось выше, _physics_process() выполняется с фиксированными временными интервалами, насколько это возможно, чтобы сохранить стабильность физических взаимодействий. Вы можете изменить интервал между шагами физики в Настройках проекта, в разделе Physics -> Common -> Physics Fps По умолчанию он установлен на 60 раз в секунду.
Движок вызывает этот метод перед каждым шагом физики:
func _physics_process(delta):
# Do something...
pass
public override void _PhysicsProcess(double delta)
{
// Do something...
}
Функция _process() не синхронизирована с физикой. Её скорость зависит от аппаратного обеспечения и оптимизации игры. Она также выполняется после этапа обработки физики в однопоточных играх.
Вы можете увидеть функцию _process() в работе, создав сцену с одним узлом Label и прикрепив к нему следующий скрипт:
extends Label
var time = 0
func _process(delta):
time += delta
text = str(time) # 'text' is a built-in Label property.
using Godot;
public partial class CustomLabel : Label
{
private double _time;
public override void _Process(double delta)
{
_time += delta;
Text = _time.ToString(); // 'Text' is a built-in Label property.
}
}
При запуске сцены вы должны увидеть, как счетчик увеличивается с каждым кадром.