【问题标题】:Is there any onClose event in OpenFL?OpenFL 中是否有任何 onClose 事件?
【发布时间】:2015-01-03 19:41:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: haxe nme


    【解决方案1】:

    要回答您关于openfl-next 的问题,有lime.app.Application.onExit 事件,它继承自lime.app.ModuleApplication 引用存储在 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!");
    });
    

    【讨论】:

    • 当时是“下一个”现在是石灰 2.9.0 吗?
    • 撰写本文时的版本为 OpenFL 3.5.x/Lime 2.8.x。在当前版本中,“next”是默认后端,而“legacy”是旧版本,可以通过标志 (openfl_legacy) 启用以实现兼容性。
    【解决方案2】:

    部分答案是回退到旧版 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 的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 2017-02-07
      • 1970-01-01
      相关资源
      最近更新 更多