Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Idle and Physics Processing

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.

There are two types of processing available to you:

  1. Idle processing allows you to run code that updates a node every frame, as often as possible.

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

Zpracování v nečinnosti můžete aktivovat definováním metody _process() ve skriptu. Můžete ji vypnout a znovu zapnout voláním Node.set_process().

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

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

Je důležité mít na paměti, že frekvence, se kterou bude _process () vyvolávána, závisí na tom, na jakém FPS (snímky za sekundu) vaše aplikace běží. Tato rychlost může kolísat jak v průběhu času tak vzhledem k rozdílnému výkonu jednotlivých zařízení.

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.

Zpracování fyziky pomocí _physics_process () je podobné, ale mělo by být použito pro akce, které musí nastat před každým fyzikálním krokem, jako je například ovládání postavy. Vždy běží před zpracováním kroku fyziky a je volán ve fixních časových intervalech: standardně 60krát za sekundu. Interval můžete změnit z Nastavení projektu v části Fyzika -> Společné -> Fyzika Fps.

The engine calls this method before every physics step:

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

Funkce _process () však není synchronizována s fyzikou. Její obnovovací frekvence není konstantní a závisí na hardwaru a optimalizaci hry. U jednovláknových her je spouštěna až po dokončení fyzikálního kroku.

Jednoduchý způsob, jak vidět funkci _process() při práci je vytvořit scénu s jediným Label uzlem s následujícím skriptem:

extends Label

var time = 0

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

Ukáže nám to počítadlo, které se s každým dalším framem (snímkem) zvyšuje.