【发布时间】:2011-07-11 21:12:58
【问题描述】:
我知道 AS3 加载器的类 unloadAndStop() 假设在我加载一个 SWF 阶段时卸载并停止所有内容,但它是否也会更改库中的对象(即使它们不在舞台上?)。
我将描述我的问题以解决它:我正在将 SWF 动态加载到我的 AS3 应用程序中,并使用 applicationDomain 和 getDefinition 从它们中提取所需的符号。我正在加载的 SWF/FLA 阶段是空的,我所拥有的只是库中导出的符号。
当我加载其中包含预编译剪辑的符号时会出现问题(在我的情况下,是 Partigen 发射器,但我认为这并不重要),它可能具有事件侦听器或计时器 - 代码当加载剪辑的父 SWF 的加载程序调用 unloadAndStop() 时,这些剪辑停止工作并且行为怪异。我假设 unloadAndStop() 从中删除了所需的事件侦听器,但不确定为什么(再次,它 not 在舞台上)。
我会编写我自己的 unloadAndStop() 来过滤这些预编译的剪辑或检查那里的真实情况,但我很确定 unloadAndStop() 会做一些通过 API 不可用的事情。
什么可以解释这种行为?任何人都可以想到一个可能的解决方案? 谢谢。
【问题讨论】:
-
unloadAndStop 删除您正在加载的实例并删除与其关联的所有侦听器。如果您使用带有 getDefinition 的类,则不会在库中复制这些类/符号/电影剪辑,而是使用它们的直接实例(而不是克隆)。如果你 unloadAndStop 它们,你明确告诉所有这些要卸载,因此你将无权访问它们。
-
希望对您有所帮助 - unloadAndStop 在我上次检查的 Adobe 网站上并没有很好的记录......关于它的大部分信息都是在用户社区中找到的,而且仍然很少。
-
为什么需要使用 unloadAndStop()?您是否在资源严格受限的嵌入式系统上运行此应用程序?如果我理解正确,您的用例听起来非常适合仅在台式机上加载 swf 并“忘记它”。当您可能再次需要资源时,为什么要卸载它们?
-
实际上,我在 unloadAndStop() 之后使用 getDefinition() 提取的所有符号都没有任何问题。其中一些甚至有代码。我将 getDefinition() 生成的 Class 保存在 Dictionary 中,然后在需要时将其实例化。效果不好的一个是使用从预编译库(Partigen)中获取的代码。我相信,如果我什至卸载类,我将无法像上面描述的那样创建实例(但我做到了)。似乎正在发生的事情是它从代码本身中删除事件侦听器,同时在没有侦听器的情况下保留它。
标签: actionscript-3 flash loader applicationdomain