0

我正在构建一个 Flash 面板,当它在 Flash IDE 中处于活动状态时,它会从 .fla 读取元数据。此面板还将元数据存储在 .fla 中,这没问题。有问题的是我不知道如何阻止事件侦听器侦听 onDocumentChange。

我希望它只要打开就可以监听它,但是当它关​​闭时它应该自行清理,因为每次选择新文档时尝试读取元数据并不是一件好事。

我试图在面板中侦听各种事件以检测用户何时关闭它,但没有成功。

有人知道这件事吗?

4

3 回答 3

3

我对 JSFL 中的事件做了很多工作,可悲的事实是该系统存在缺陷。文档事件很好,但是图层和帧事件很不可靠;以错误的顺序执行,当您退出编辑时图层事件未触发等,等等。

从面板轮询通常是最好的方法,并且不会影响性能。

但是,文档事件是可以的。有关如何删除它们的文档不正确,请参阅 Dru Kepple 的帖子,了解您应该做什么:

http://summitprojectsflashblog.wordpress.com/2010/11/08/jsfl-get-fl-removeeventlistener-to-work/

于 2011-10-20T22:30:10.743 回答
1

嗯,如果您可以将元数据存储在 .fla 中(或者无论如何具有某种唯一 ID),您可以检查事件侦听器是否仍然以某种方式打开?

所以基本上指纹 .fla 并在侦听器中进行任何工作之前检查是否存在以查看文件是否打开。如果不是,则删除侦听器,如果是,则触发正常的事件处理。

于 2011-03-24T15:08:10.660 回答
0

在您的侦听器函数中包含另一个函数,该函数循环遍历 IDE 中的所有 swf 面板,检查您的面板名称是否存在。如果没有,则删除您的侦听器并从您的侦听器函数中返回。

function myListenerFunction () {
    if ( !checkForPanel( myPanelName ) ) {
        fl.removeEventListener( type, eventID );
        return;
    }
}

function checkForPanel( arg_panelName ) {

    var target_panelName = arg_panelName;   
    var target_panelsArr = fl.swfPanels;

    var i;
    var iLen = target_panelsArr.length;
    var _swfPanel;
    for ( i = 0; i < iLen; i++ ) {

        _swfPanel = target_panelsArr[i];

        if ( (_swfPanel.name) == target_panelName ) {
            return true;
        }       
    }

    return false;
}
于 2014-07-04T14:17:31.233 回答