处理退出请求

退出

大多数平台都有要求应用程序退出的选项. 在台式机上, 这通常是通过窗口标题栏上的 "x" 图标来实现的. 在安卓系统上, 当在主屏幕上时, 后退按钮被用来退出(否则就返回).

处理通知

在桌面平台上, MainLoop 有一个特殊的 MainLoop.NOTIFICATION_WM_QUIT_REQUEST 通知, 当请求退出时, 会向所有节点发送.

在Android系统中, 会发送 MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST 代替. 如果在项目设置中勾选了 Application > Config > Quit On Go Back (默认), 按Back按钮将退出应用程序.

注解

MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST 在iOS上不支持, 因为iOS设备没有实体的Back按钮.

处理通知的方法如下(在任何节点上):

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
}

在开发移动应用程序时, 除非用户在主屏幕上, 否则不需要退出, 因此处理方式有变化.

值得注意的是, 默认情况下, 在请求退出时,Godot应用程序具有退出的内置行为, 可以更改为:

get_tree().set_auto_accept_quit(false)
GetTree().SetAutoAcceptQuit(false);

发送你自己的退出通知

虽然强迫应用程序关闭可以通过调用 SceneTree.quit 来完成,但这样做不会发送退出的 *通知 * 。这意味着上面描述的函数不会被调用。通过调用 SceneTree.quit 来退出,将不允许自定义动作的完成(比如保存、确认退出或调试),即使你试图延迟强制退出的行。

相反,您应该发送退出请求:

get_tree().notification(MainLoop.NOTIFICATION_WM_QUIT_REQUEST)
GetTree().Notification(MainLoop.NotificationWmQuitRequest)