Beendigungsanfragen bearbeiten
Beenden
Die meisten Plattformen bieten die Möglichkeit, die Anwendung zum Beenden aufzufordern. Auf Desktops geschieht dies in der Regel über das "x"-Symbol in der Titelleiste des Fensters. Auf mobilen Geräten kann die Anwendung jederzeit beendet werden, während sie im Hintergrund läuft.
Bearbeitung der Benachrichtigung
Auf Desktop- und Web-Plattformen erhält Node eine spezielle NOTIFICATION_WM_CLOSE_REQUEST-Benachrichtigung, wenn das Beenden vom Window-Manager angefordert wird.
Die Benachrichtigung wird wie folgt gehandhabt (auf jedem Node):
func _notification(what):
if what == NOTIFICATION_WM_CLOSE_REQUEST:
get_tree().quit() # default behavior
public override void _Notification(int what)
{
if (what == NotificationWMCloseRequest)
GetTree().Quit(); // default behavior
}
Es ist wichtig zu beachten, dass Godot-Anwendungen standardmäßig so eingestellt sind, dass sie beendet werden, wenn der Fenstermanager das Beenden anfordert. Dies kann geändert werden, so dass der Benutzer den gesamten Beendigungsvorgang selbst durchführen kann:
get_tree().set_auto_accept_quit(false)
GetTree().AutoAcceptQuit = false;
Auf mobilen Geräten
Es gibt keine direkte Entsprechung zu NOTIFICATION_WM_CLOSE_REQUEST auf mobilen Plattformen. Aufgrund der Beschaffenheit mobiler Betriebssysteme ist der einzige Ort, an dem Sie Code vor dem Beenden ausführen können, wenn die App im Hintergrund angehalten wird. Sowohl unter Android als auch unter iOS kann die App jederzeit durch den Benutzer oder das Betriebssystem beendet werden. Eine Methode, diese Möglichkeit vorauszuplanen, ist die Verwendung von NOTIFICATION_APPLICATION_PAUSED, um notwendige Aktionen durchzuführen, während die App angehalten wird.
Bemerkung
On iOS, you only have approximately 5 seconds to finish a task started by this signal. If you go over this allotment, iOS will kill the app instead of pausing it.
On Android, pressing the Back button will exit the application if
Application > Config > Quit On Go Back is checked in the Project Settings
(which is the default). This will fire NOTIFICATION_WM_GO_BACK_REQUEST.
Senden einer eigenen Beenden-Benachrichtigung
Während das Beenden der Anwendung durch den Aufruf von SceneTree.quit erzwungen werden kann, wird dadurch die NOTIFICATION_WM_CLOSE_REQUEST nicht an die Nodes im Szenenbaum gesendet. Das Beenden durch den Aufruf von SceneTree.quit lässt keine benutzerdefinierten Aktionen zu (wie z.B. Speichern, Bestätigen des Beendens oder Debuggen), selbst wenn Sie versuchen, die Zeile, die das Beenden erzwingt, zu verzögern.
Wenn Sie stattdessen die Nodes im Szenenbaum über den bevorstehenden Programmabbruch benachrichtigen wollen, sollten Sie die Benachrichtigung selbst senden:
get_tree().root.propagate_notification(NOTIFICATION_WM_CLOSE_REQUEST)
GetTree().Root.PropagateNotification((int)NotificationWMCloseRequest);
Das Senden dieser Benachrichtigung informiert alle Nodes über die Beendigung des Programms, beendet aber nicht das Programm selbst, anders als in 3.X. Um das vorherige Verhalten zu erreichen, sollte SceneTree.quit nach der Benachrichtigung aufgerufen werden.