2012-12-06 249 views
3

我需要一些关于这个问题的澄清,因为我刚刚遇到加载到重用的加载器对象的swfs问题。
ApplicationDomain澄清需要

因此可以说我有3个SWF。
的main.swf
childA.swf
childB.swf

的main.swf中有一个装载机对象得到重用(myloader.load( “childA.swf”))和childA或childB SWF将通过用户交互加载。
这两个子swfs都有一个com包​​,该包中包含一个名为config的包。
配置文件对于刚刚命名的两个类都是不同的文件。
两个孩子也SWF派遣的主要监听

现在我有问题,如果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中。
我的意思是不应该阻止事件?

回答

2

卸载SWF

Loader类提供Loader.unload()(或Flash播放器VERS 10后 - Loader.unloadAndStop()

问题与第二加载的SWF由第一

重写存储在ApplicationDomain中的对象以其类名存储,我不知道所加载的SWF(或其子项)的类名是否重写。即使情况并非如此;为什么不为加载的每个对象使用Loader的新实例?

如何主SWF可以从另一个应用程序域

主SWF去接两个孩子将能够因为他们的主要SWF的子域与新(加载)应用领域的工作(请参阅ApplicationDomain.parentDomain)。主SWF的域将是'系统域',新实例将被加载到它下面。

拆分从Loader

加载的主权财富基金在理想情况下,你要访问的SWF数据无关的Loader的状态。您可以通过访问一次加载的SWF的根动画片段做到这一点,与

var rootClipClass:Class = ApplicationDomain.getDefinition("[InsertYourRootClipName]") as Class; 
var rootClip:MovieClip = new rootClipClass(); 

创建一个新的实例在这一点上,你可以卸载装载机和干净你的新鲜实例工作。

延伸阅读

+0

唉唉, “因为他们是孩子域” 这是我失踪的关键。 –

+0

哦,只是需要注意。我隐约记得大约3年前阅读过一些内容,说运行时会将应用程序域添加到包中。因为这是很久以前的事情,所以不要引用我的话,那时我没有付出任何努力。 –