Up to date

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

Procesamiento en Reposo y Físico

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.

Existen dos tipos de procesamiento disponibles para usted:

  1. El procesamiento en reposo (Idle processing) te permite ejecutar código que actualiza un nodo en cada cuadro, tan frecuentemente como sea posible.

  2. Así es, el procesamiento en reposo (Idle processing) te permite ejecutar código que actualiza un nodo en cada cuadro, tan frecuentemente como sea posible. Es útil para tareas que no necesitan estar sincronizadas con el motor de físicas y pueden ejecutarse en cualquier momento durante el ciclo del juego.

Puedes activar el procesamiento en reposo (Idle processing) definiendo el método _process() en un script. Puedes desactivarlo y volverlo a activar llamando a Node.set_process().

El motor llama a este método cada vez que dibuja un frame:

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

Ten en cuenta que la frecuencia con la que el motor llama a _process() depende de la tasa de cuadros por segundo (framerate) de tu aplicación, la cual puede variar con el tiempo y entre diferentes dispositivos.

El parámetro delta de la función es el tiempo transcurrido en segundos desde la llamada anterior a _process(). Utiliza este parámetro para realizar cálculos independientes de la tasa de cuadros por segundo. Por ejemplo, siempre debes multiplicar un valor de velocidad por delta para animar un objeto en movimiento. Esto asegura que la animación sea consistente y suave independientemente de las variaciones en el framerate.

El procesamiento de físicas funciona con una función virtual similar: _physics_process(). Utilízala para cálculos que deben realizarse antes de cada paso de físicas, como mover un personaje que colisiona con el mundo del juego. Como se mencionó anteriormente, _physics_process() se ejecuta a intervalos de tiempo fijos tanto como sea posible para mantener las interacciones físicas estables. Puedes cambiar el intervalo entre pasos de físicas en la Configuración del Proyecto, bajo Física -> Común -> Fps de Física. Por defecto, está configurado para ejecutarse 60 veces por segundo.

The engine calls this method before every physics step:

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

La función _process() no está sincronizada con la física. Su frecuencia depende del hardware y la optimización del juego. Además, se ejecuta después del paso de física en juegos de un solo hilo.

Puedes ver la función _process() en acción al crear una escena con un solo nodo Label y adjuntarle el siguiente script:

extends Label

var time = 0

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

Cuando ejecutes la escena, deberías ver un contador incrementándose en cada cuadro.