gpt4 book ai didi

actionscript-3 - 需要澄清 ApplicationDomain

转载 作者:行者123 更新时间:2023-12-04 04:32:42 31 4
gpt4 key购买 nike

我需要对这个主题进行一些澄清,因为我刚刚遇到将 swfs 加载到重用加载器对象的问题。

假设我有 3 个 SWF。
主.swf
childA.swf
childB.swf

Main.swf 中有一个可重用的加载器对象 (myloader.load("childA.swf")),childA 或 childB swf 将通过用户交互加载。
两个子 swf 都有一个 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 被创建并在加载时分配给上下文。
这就像做梦一样,我现在可以整天加载和卸载。

我感到困惑的是,当我认为 Main swf 不应该接收它时,子调度仍然有效,因为它不在同一个 appDomain 中。
我的意思是不应该阻止该事件吗?

最佳答案

卸载 SWF

Loader 类提供 Loader.unload()(或在 Flash Player 版本 10 之后 - Loader.unloadAndStop())

第二个加载的 SWF 被第一个覆盖的问题

存储在 ApplicationDomain 中的对象按其类名存储,我想知道加载的 SWF(或其子项)的类名是否被覆盖。即使事实并非如此;为什么不为每个正在加载的对象使用 Loader 的新实例?

Main SWF 如何从另一个应用程序域中获取两个子级

主 SWF 将能够使用新的(加载的)应用程序域,因为它们是主 SWF 的子域(请参阅 ApplicationDomain.parentDomain)。主 SWF 的域将是“系统域”,新实例将加载到它下面。

从加载程序中分离加载的 SWF

理想情况下,您希望能够访问与 Loader 状态无关的 SWF 数据。您可以通过在加载后访问 SWF 的根影片剪辑并使用

创建一个新实例来执行此操作
var rootClipClass:Class = ApplicationDomain.getDefinition("[InsertYourRootClipName]") as Class; 
var rootClip:MovieClip = new rootClipClass();

此时您可以卸载加载程序并干净地使用您的新实例。

进一步阅读

关于actionscript-3 - 需要澄清 ApplicationDomain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13752053/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com