Gestion des demandes de quitter l'application

Quitter

La plupart des plateformes ont la possibilité de demander de quitter l'application. Sur les ordinateurs de bureau, cela se fait généralement à l'aide de l'icône "x" dans la barre de titre de la fenêtre. Sur Android, le bouton retour est utilisé pour quitter l'application lorsqu'elle est sur l'écran principal (et pour revenir en arrière dans le cas contraire).

Traitement de la notification

Sur les plates-formes de bureau, le MainLoop a une notification spéciale MainLoop.NOTIFICATION_WM_QUIT_REQUEST qui est envoyée à tous les nœuds lorsqu'il est demandé de quitter.

Sur Android, MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST est envoyé à la place. En appuyant sur le bouton Retour, vous quitterez l'application si Application > Config > Quitter On Go Back est coché dans les paramètres du projet (qui est la valeur par défaut).

Note

MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST n'est pas supporté sur iOS, car les périphériques iOS n'ont pas de bouton Back physique.

Le traitement de la notification se fait comme suit (sur n'importe quel nœud) :

func _notification(what):
    if what == MainLoop.NOTIFICATION_WM_QUIT_REQUEST:
        get_tree().quit() # default behavior

Lors du développement d'applications mobiles, il n'est pas souhaitable de quitter à moins que l'utilisateur se trouve sur l'écran principal, ce qui permet de modifier le comportement.

Il est important de noter que par défaut, les applications Godot ont le comportement intégré pour quitter lorsque quitter est demandé, cela peut être changé :

get_tree().set_auto_accept_quit(false)

Envoi de votre propre notification d'arrêt

Bien qu'il soit possible de forcer la fermeture de l'application en appelant SceneTree.quit, cela n'enverra pas la notification de fermeture. Cela signifie que la fonction décrite ci-dessus ne sera pas appelée. Quitter en appelant SceneTree.quit ne permettra pas aux actions personnalisées de se terminer (comme la sauvegarde, la confirmation de la sortie ou le débogage), même si vous essayez de retarder la ligne qui force la sortie.

Au lieu de cela, vous devez envoyer une demande d'arrêt :

get_tree().notification(MainLoop.NOTIFICATION_WM_QUIT_REQUEST)