我需要对这个问题进行一些澄清,因为我刚刚遇到了将swfs加载到重用的加载器对象中的问题。
假设我有3个SWF。
Main.swf
childA.swf
childB.swf
Main.swf中有一个可重用的加载器对象(myloader.load("childA.swf")),childA或childB swf将通过用户交互加载。
这两个子swfs都有一个com包,其中包含一个名为config的类。
两个类的配置文件是不同的文件,只是名称相同。
这两个子swf还会分派一个Main监听的事件
现在我遇到的问题是,如果先加载childA,然后在加载childB之后,它仍然会显示为childA。基本上,无论哪一个先加载到该加载器中,都将是赢家。
这让我抓狂,因为我做的任何事情都不会导致swf卸载。直到我找到了下面的代码。
var appDomain:ApplicationDomain = new ApplicationDomain();
var context:LoaderContext = new LoaderContext(false, appDomain);
_contentPanel.load(new URLRequest(str), context);我在一篇关于如何真正卸载swf的文章中偶然发现了这段代码。显然,这也适用于如何真正加载swf。
正如您所看到的,加载时会创建一个新的appDomain并将其分配给上下文。
这就像一个梦一样,我现在可以整天加载和卸载。
我的困惑是子调度的事件仍然有效,当我认为主swf不应该拾取它时,因为它不在相同的appDomain中。
我的意思是,事件不应该被阻止吗?
发布于 2012-12-07 05:10:05
卸载SWF
Loader类提供Loader.unload() (或更高版本的Flash Player。10 - Loader.unloadAndStop())
第二个加载的SWF被第一个覆盖时出现的问题
存储在ApplicationDomain中的对象是通过它们的类名存储的,我想知道加载的SWF(或它们的子项)的类名是否会被覆盖。即使不是这样,为什么不为每个要加载的对象使用Loader的新实例呢?
主SWF如何从另一个应用程序域获取这两个子级
主SWF将能够使用新的(已加载的)应用程序域,因为它们是主SWF的子域(请参阅ApplicationDomain.parentDomain)。主SWF的域将是“系统域”,新实例将被加载到它下面。
从加载器拆分加载的SWF
理想情况下,您希望能够访问与Loader状态无关的SWF数据。您可以通过在加载后访问SWF的根movieClip并使用
var rootClipClass:Class = ApplicationDomain.getDefinition("[InsertYourRootClipName]") as Class;
var rootClip:MovieClip = new rootClipClass(); 在这一点上,您可以卸载加载器并干净地使用新实例。
进一步阅读
https://stackoverflow.com/questions/13752053
复制相似问题