Pausar juegos y el modo de procesamiento (process mode)¶
Introducción¶
En la mayoría de los juegos, es deseable interrumpir el juego en algún momento para hacer algo más, como tomar un descanso o cambiar opciones. Implementar un control detallado de qué puede pausarse (y qué no) es mucho trabajo, por lo que Godot proporciona un marco simple para pausar.
Como funciona la pausa¶
Para pausar el juego, se debe establecer el estado de pausa. Esto se hace asignando true
a la propiedad SceneTree.paused:
get_tree().paused = true
GetTree().Paused = true;
Hacer esto provocará dos cosas. Primero, se detendrán las físicas 2D y 3D para todos los nodos. Segundo, el comportamiento de ciertos nodos se detendrá o se iniciará dependiendo de su modo de procesamiento (process mode).
Nota
Los servidores de física pueden activarse mientras el juego está en pausa usando sus métodos set_active
.
Modos de procesamiento¶
Cada nodo en Godot tiene un "Modo de Pausa" que define cuándo se procesa. Puede encontrarse y cambiarse en las propiedades del :ref:`Node <class_Node>`en el inspector.
También puedes modificar la propiedad con código:
func _ready():
pause_mode = Node.PAUSE_MODE_PROCESS
public override void _Ready()
{
PauseMode = Node.PauseModeEnum.Process;
}
Esto es lo que cada modo indica que un nodo debe hacer:
Heredado: Se procesa en función del estado del padre, abuelo, etc. El primer padre que tenga un estado diferente a "Heredado" (non-Inherit).
Detener: Detiene el nodo sin importar qué (y también a los hijos en modo "Heredado"). Cuando está en pausa, este nodo no se procesará.
Procesar: Procesa el nodo sin importar qué (y también a los hijos en modo "Heredado"). En pausa o no, este nodo se procesará.
Por defecto, todos los nodos tienen esta propiedad en el estado "Heredado" (Inherit). Si el padre se establece en "Heredado", entonces se verificará el abuelo y así sucesivamente. Si no se encuentra un estado en ninguno de los abuelos, se usará el estado de pausa en SceneTree. Esto significa que, por defecto, cuando el juego está en pausa, todos los nodos estarán en pausa. Varias cosas suceden cuando un nodo deja de procesarse.
Las funciones _process
, _physics_process
, _input
y _input_event
no se llamarán. Sin embargo, las señales aún funcionarán y harán que sus funciones conectadas se ejecuten, incluso si el script de esa función está adjunto a un nodo que tiene su modo de pausa establecido en "Detener" (Stop).
Los nodos de animación pausarán su animación actual, los nodos de audio pausarán su transmisión de audio actual y las partículas se detendrán. Estos se reanudarán automáticamente cuando el juego deje de estar en pausa.
Es importante tener en cuenta que incluso si un nodo está siendo procesado mientras el juego está en pausa, la física NO funcionará para él de forma predeterminada. Como se mencionó anteriormente, esto se debe a que los servidores de física están desactivados. Los servidores de física pueden activarse mientras el juego está en pausa mediante el uso de sus métodos set_active
.