OpenFL 中是否有任何 onClose 事件?
Is there any onClose event in OpenFL?
我在 OpenFL 2.2.1 应用程序中使用需要在退出时清理的库(即关闭套接字,以便它在超时前不会挂起)。
但是,当我用 Alt+F4
或 window 的关闭按钮关闭 window 时,我找不到任何调用的事件。
如何检测应用程序正在终止以清理我的资源?
部分答案是回退到旧版 OpenFL(使用 -Dopenfl-legacy
或 <haxedef name="openfl-legacy" />
)。
此技巧强制编译器使用前者 API,后者启用 Lib.stage.onQuit
.
public static function main():Void
{
// …
Lib.stage.onQuit = onClose;
// …
}
private static function onClose()
{
// …
// Cleanup of opened resources
// …
Lib.close();
}
请务必致电 Lib.close()
否则您的 window 将无法再关闭!
然而,这并没有回答我对较新 openfl-next
的问题。
要回答关于 openfl-next
的问题,有 lime.app.Application.onExit
事件,它继承自 lime.app.Module
。 Application
引用存储在 openfl.display.Stage.application
实例字段中。
因此,函数的多版本变体如下:
static function setExitHandler(func:Void->Void):Void {
#if openfl_legacy
openfl.Lib.current.stage.onQuit = function() {
func();
openfl.Lib.close();
};
#else
openfl.Lib.current.stage.application.onExit.add(function(code) {
func();
});
#end
}
然后你就
setExitHandler(function() {
trace("Quit!");
});
我在 OpenFL 2.2.1 应用程序中使用需要在退出时清理的库(即关闭套接字,以便它在超时前不会挂起)。
但是,当我用 Alt+F4
或 window 的关闭按钮关闭 window 时,我找不到任何调用的事件。
如何检测应用程序正在终止以清理我的资源?
部分答案是回退到旧版 OpenFL(使用 -Dopenfl-legacy
或 <haxedef name="openfl-legacy" />
)。
此技巧强制编译器使用前者 API,后者启用 Lib.stage.onQuit
.
public static function main():Void
{
// …
Lib.stage.onQuit = onClose;
// …
}
private static function onClose()
{
// …
// Cleanup of opened resources
// …
Lib.close();
}
请务必致电 Lib.close()
否则您的 window 将无法再关闭!
然而,这并没有回答我对较新 openfl-next
的问题。
要回答关于 openfl-next
的问题,有 lime.app.Application.onExit
事件,它继承自 lime.app.Module
。 Application
引用存储在 openfl.display.Stage.application
实例字段中。
因此,函数的多版本变体如下:
static function setExitHandler(func:Void->Void):Void {
#if openfl_legacy
openfl.Lib.current.stage.onQuit = function() {
func();
openfl.Lib.close();
};
#else
openfl.Lib.current.stage.application.onExit.add(function(code) {
func();
});
#end
}
然后你就
setExitHandler(function() {
trace("Quit!");
});