在OpenFL中有任何onClose事件吗?

时间:2015-01-03 19:41:10

标签: haxe nme

在OpenFL 2.2.1应用程序中,我正在使用一个需要在退出时清理的库(即关闭套接字,以便在超时之前不会挂起)。

但是,当我使用Alt+F4或窗口的关闭按钮关闭窗口时,我找不到任何被调用的事件。

如何检测应用程序是否正在终止,以便清理我的资源?

2 个答案:

答案 0 :(得分:4)

要回答有关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!");
});

答案 1 :(得分:0)

部分答案是回退到传统的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(),否则您的窗口将无法再关闭!

但是,对于较新的openfl-next,这不能回答我的问题。