Up to date
This page is up to date for Godot 4.2
.
If you still find outdated information, please open an issue.
Pausieren von Spielen und Prozessierungsmodus¶
Einführung¶
In den meisten Spielen ist es wünschenswert, das Spiel irgendwann zu unterbrechen, um etwas anderes zu tun, z.B. eine Pause zu machen oder die Optionen zu ändern. Die Implementierung einer feinkörnigen Steuerung für das, was pausiert werden kann (und was nicht), ist eine Menge Arbeit, so dass in Godot ein einfacher Rahmen für die Pausierung vorgesehen ist.
Wie das Pausieren funktioniert¶
Um das Spiel zu pausieren, muss der Pausenstatus gesetzt werden. Dies geschieht durch Zuweisung von true
an die Property SceneTree.paused:
get_tree().paused = true
GetTree().Paused = true;
Dadurch werden zwei Dinge bewirkt. Erstens wird die 2D- und 3D-Physik für alle Nodes gestoppt. Zweitens wird das Verhalten bestimmter Nodes abhängig von ihrem Prozessierungsmodus angehalten oder gestartet.
Bemerkung
Die Physikserver können mit Hilfe ihrer set_active
-Methoden aktiv gemacht werden, während das Spiel pausiert ist.
Prozessierungsmodi¶
Jeder Node in Godot hat einen "Prozessierungsmodus", der definiert, wann er verarbeitet wird. Er kann unter den Node-Propertys eines Nodes im Inspektor gefunden und geändert werden.
Sie können die Property auch mit Code ändern:
func _ready():
process_mode = Node.PROCESS_MODE_PAUSABLE
public override void _Ready()
{
ProcessMode = Node.ProcessModeEnum.Pausable;
}
Jeder Modus weist einen Node an, Folgendes zu tun:
Erben: Prozessieren je nach Status des Parent, sowie dessen Parent usw. Der erste Parent, der einen Nicht-Vererbungsstatus hat.
Pausierbar: Prozessierung des Nodes (und seiner Child-Nodes im Modus "Erben") nur, wenn das Spiel nicht pausiert ist.
Wenn Pausiert: Prozessiert den Node (und seine Child-Nodes im Erben-Modus) nur, wenn das Spiel pausiert ist.
Immer: Prozessiert den Node (und seine Child-Nodes im Modus "Erben") in jedem Fall. Ob pausiert oder nicht, dieser Node wird verarbeitet.
Deaktiviert: Der Node (und seine Child-Nodes im Modus "Vererben") wird überhaupt nicht prozessiert.
Standardmäßig haben alle Nodes diese Property auf den Status "Erben" gesetzt. Wenn der Parent auf "Erben" gesetzt ist, wird dessen Parent überprüft und so weiter. Wenn ein Zustand in keinem übergeordneten Nodes gefunden werden kann, wird der Pausenzustand im SceneTree verwendet. Das bedeutet, dass standardmäßig alle Nodes angehalten werden, wenn das Spiel pausiert wird. Wenn ein Node die Verarbeitung anhält, passieren mehrere Dinge.
Die Funktionen _process
, _physics_process
, _input
, und _input_event
werden nicht aufgerufen. Signale funktionieren jedoch weiterhin und bewirken, dass die mit ihnen verbundene Funktion ausgeführt wird, selbst wenn das Skript dieser Funktion an einen Node angehängt ist, der gerade nicht verarbeitet wird.
Animations-Nodes halten ihre aktuelle Animation an, Audio-Nodes halten ihren aktuellen Audio-Stream an, und Partikel halten an. Sie werden automatisch fortgesetzt, wenn das Spiel nicht mehr pausiert ist.
Es ist wichtig zu beachten, dass selbst wenn ein Node verarbeitet wird, während das Spiel pausiert ist, die Physik standardmäßig NICHT für ihn funktioniert. Wie bereits erwähnt, liegt das daran, dass die Physikserver ausgeschaltet sind. Die Physikserver können auf aktiv gesetzt werden, während das Spiel pausiert ist, indem man ihre set_active
-Methoden benutzt.