我正在构建一个 Flash 面板,当它在 Flash IDE 中处于活动状态时,它会从 .fla 读取元数据。此面板还将元数据存储在 .fla 中,这没问题。有问题的是我不知道如何阻止事件侦听器侦听 onDocumentChange。
我希望它只要打开就可以监听它,但是当它关闭时它应该自行清理,因为每次选择新文档时尝试读取元数据并不是一件好事。
我试图在面板中侦听各种事件以检测用户何时关闭它,但没有成功。
有人知道这件事吗?
我正在构建一个 Flash 面板,当它在 Flash IDE 中处于活动状态时,它会从 .fla 读取元数据。此面板还将元数据存储在 .fla 中,这没问题。有问题的是我不知道如何阻止事件侦听器侦听 onDocumentChange。
我希望它只要打开就可以监听它,但是当它关闭时它应该自行清理,因为每次选择新文档时尝试读取元数据并不是一件好事。
我试图在面板中侦听各种事件以检测用户何时关闭它,但没有成功。
有人知道这件事吗?
我对 JSFL 中的事件做了很多工作,可悲的事实是该系统存在缺陷。文档事件很好,但是图层和帧事件很不可靠;以错误的顺序执行,当您退出编辑时图层事件未触发等,等等。
从面板轮询通常是最好的方法,并且不会影响性能。
但是,文档事件是可以的。有关如何删除它们的文档不正确,请参阅 Dru Kepple 的帖子,了解您应该做什么:
http://summitprojectsflashblog.wordpress.com/2010/11/08/jsfl-get-fl-removeeventlistener-to-work/
嗯,如果您可以将元数据存储在 .fla 中(或者无论如何具有某种唯一 ID),您可以检查事件侦听器是否仍然以某种方式打开?
所以基本上指纹 .fla 并在侦听器中进行任何工作之前检查是否存在以查看文件是否打开。如果不是,则删除侦听器,如果是,则触发正常的事件处理。
在您的侦听器函数中包含另一个函数,该函数循环遍历 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;
}