跳到主要内容

处理退出请求

大多数平台都有要求应用程序退出的选项。在桌面系统中,通常是通过窗口标题栏上的图标来实现的。在 Android 系统上,当在主屏幕上时,后退按钮被用来退出,否则就返回。

处理通知

在桌面平台上, MainLoop 有一个特殊的 MainLoop.NOTIFICATION_WM_QUIT_REQUEST 通知, 当请求退出时, 会向所有节点发送。节点的处理方法如下:

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

Android系统中, 会发送 MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST 代替. 如果在项目设置中勾选了 应用程序 > 配置 > 返回时退出 (默认选项), 按Back按钮将退出应用程序。

caution

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

在开发移动应用程序时, 除非用户在主屏幕上, 否则不需要退出, 因此处理方式有变化。值得注意的是,默认情况下,在请求退出时,应用程序具有退出的内置行为, 可以更改为:

get_tree().set_auto_accept_quit(false)

自定义退出通知

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

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

get_tree().notification(MainLoop.NOTIFICATION_WM_QUIT_REQUEST)