处理退出请求
退出
大多数平台都有要求应用程序退出的选项。在桌面系统中,这通常是通过窗口标题栏上的“x”图标来实现的。在 Android 系统上,当在主屏幕上时,后退按钮被用来退出(否则就返回)。
处理通知
在桌面平台上, 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按钮.
处理通知的方法如下(在任何节点上):
GDScript
C#
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应用程序具有退出的内置行为, 可以更改为:
GDScript
C#
get_tree().set_auto_accept_quit(false)
GetTree().SetAutoAcceptQuit(false);
发送你自己的退出通知
虽然强迫应用程序关闭可以通过调用 SceneTree.quit 来完成,但这样做不会发送退出的通知。这意味着上面描述的函数不会被调用。通过调用 SceneTree.quit 来退出,将不允许自定义动作的完成(比如保存、确认退出或调试),即使你试图延迟强制退出的行。
相反,您应该发送退出请求:
GDScript
C#
get_tree().notification(MainLoop.NOTIFICATION_WM_QUIT_REQUEST)
GetTree().Notification(MainLoop.NotificationWmQuitRequest)