Beendigungsanfragen bearbeiten¶
Beenden¶
Die meisten Plattformen haben die Möglichkeit, die Anwendung zum Beenden aufzufordern. Auf Desktops erfolgt dies normalerweise mit dem "x" Symbol in der Titelleiste des Fensters. Unter Android wird die Zurück-Taste zum beenden verwendet, wenn man auf dem Hauptbildschirm ist (oder ansonsten zurückzukehren).
Bearbeitung der Benachrichtigung¶
Auf Desktop-Plattformen verfügt die MainLoop über eine spezielle MainLoop.NOTIFICATION_WM_QUIT_REQUEST
-Benachrichtigung, die bei einer Beendigungsanforderung an alle Nodes gesendet wird.
Unter Android wird stattdessen MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST
gesendet. Durch Drücken der Zurück-Taste wird die Anwendung beendet, wenn in den Projekteinstellungen Anwendung> Konfiguration> Bei Zurück beenden aktiviert ist (Standardeinstellung).
Bemerkung
MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST
wird unter iOS nicht unterstützt, da iOS-Geräte keine physische Zurück-Schaltfläche haben.
Die Behandlung der Benachrichtigung erfolgt wie folgt (bei jedem Node):
func _notification(what):
if what == MainLoop.NOTIFICATION_WM_QUIT_REQUEST:
get_tree().quit() # default behavior
public override void _Notification(int what)
{
if (what == MainLoop.NotificationWmQuitRequest)
GetTree().Quit(); // default behavior
}
Bei der Entwicklung mobiler Apps ist das Beenden nur dann erwünscht, wenn sich der Benutzer auf dem Hauptbildschirm befindet, sodass das Verhalten geändert werden kann.
Es ist wichtig zu beachten, dass Godot-Apps standardmäßig das eingebaute Verhalten haben sich bei einer Beendigungsanforderung zu beenden. Dies kann geändert werden:
get_tree().set_auto_accept_quit(false)
GetTree().SetAutoAcceptQuit(false);
Sending your own quit notification¶
While forcing the application to close can be done by calling SceneTree.quit, doing so will not send the quit notification. This means the function described above won't be called. Quitting by calling SceneTree.quit will not allow custom actions to complete (such as saving, confirming the quit, or debugging), even if you try to delay the line that forces the quit.
Stattdessen sollten Sie eine Aufforderung zum Beenden senden:
get_tree().notification(MainLoop.NOTIFICATION_WM_QUIT_REQUEST)
GetTree().Notification(MainLoop.NotificationWmQuitRequest)