Processo di inattività e di fisica
Games run in a loop. Each frame, you need to update the state of your game world before drawing it on screen. Godot provides two virtual methods in the Node class to do so: Node._process() and Node._physics_process(). If you define either or both in a script, the engine will call them automatically.
Sono disponibili due tipi di processo:
Idle processing allows you to run code that updates a node every frame, as often as possible.
Physics processing happens at a fixed rate, 60 times per second by default. This is independent of your game's actual framerate, and keeps physics running smoothly. You should use it for anything that involves the physics engine, like moving a body that collides with the environment.
Il processo d'inattività si attiva definendo il metodo _process() in uno script. Può essere attivato o disattivato con la funzione Node.set_process().
The engine calls this method every time it draws a frame:
func _process(delta):
# Do something...
pass
public override void _Process(double delta)
{
// Do something...
}
È importante tenere a mente che la frequenza con cui il motore chiama _process() dipende da quanti fotogrammi al secondo (FPS) è in esecuzione la propria applicazione, il che varia nel tempo e tra i dispositivi.
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.
Il processo di fisica funziona con una funzione virtuale simile: _physics_process(). Si usa per i calcoli che è necessario eseguire prima di ogni passaggio fisico, come lo spostamento di un personaggio che entra in collisione con il mondo di gioco. Come accennato in precedenza, _physics_process() viene eseguito a intervalli di tempo fissi il più possibile per mantenere stabili le interazioni fisiche. È possibile modificare l'intervallo tra i passaggi fisici nelle Impostazioni del progetto, in Fisica -> Comuni -> FPS di fisica. Come valore predefinito, è impostato per eseguirsi 60 volte al secondo.
The engine calls this method before every physics step:
func _physics_process(delta):
# Do something...
pass
public override void _PhysicsProcess(double delta)
{
// Do something...
}
La funzione _process() non è sincronizzata con la fisica. La sue frequenza non è costante e dipende dall'hardware e dall'ottimizzazione del gioco. Viene eseguita dopo il passaggio di fisica nei giochi a thread singolo.
Si può vedere la funzione _process() al lavoro creando una scena con un singolo nodo Label, a cui si allega il seguente script:
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.
}
}
Quando la scena viene eseguita, sarà visualizzato un contatore che incrementa a ogni frame.