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 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
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.