【问题标题】:AS3 Loader's unloadAndStop odd behaviorAS3 Loader 的 unloadAndStop 奇怪行为
【发布时间】: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 在我上次检查的 Adob​​e 网站上并没有很好的记录......关于它的大部分信息都是在用户社区中找到的,而且仍然很少。
  • 为什么需要使用 unloadAndStop()?您是否在资源严格受限的嵌入式系统上运行此应用程序?如果我理解正确,您的用例听起来非常适合仅在台式机上加载 swf 并“忘记它”。当您可能再次需要资源时,为什么要卸载它们?
  • 实际上,我在 unloadAndStop() 之后使用 getDefinition() 提取的所有符号都没有任何问题。其中一些甚至有代码。我将 getDefinition() 生成的 Class 保存在 Dictionary 中,然后在需要时将其实例化。效果不好的一个是使用从预编译库(Partigen)中获取的代码。我相信,如果我什至卸载类,我将无法像上面描述的那样创建实例(但我做到了)。似乎正在发生的事情是它从代码本身中删除事件侦听器,同时在没有侦听器的情况下保留它。

标签: actionscript-3 flash loader applicationdomain


【解决方案1】:

用这种方式制作你的加载器:

myLoader.contentLoaderInfo.addEventListener( Event.INIT , myLoaderHandler, false, 0, true);

解决了unloadAndStop().引起的一些问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多