0

我有两个项目,A并且B,引用一个库,MyExternalLibrary. A并且B.swfs(两个不同的 AS3 项目)并且MyExternalLibrary.swc. 当我的应用程序运行时,A加载B.

有一个Class, MyLoader,广泛MyExternalLibrary使用BMyExternalLibrary.MyLoader加载.swf我们服务器上存在的 s(我们不嵌入它们,因为它们是根据用户请求动态加载的)。

请注意,我们的服务器包含A,B以及.swf我们要下载的所有 s。

现在,还必须在我们的服务器上A加载一些s。.swf因此,A也必须使用MyLoaderin MyExternalLibrary。因此,在A中,我添加了对 的引用MyLoader,以便在编译期间包含其二进制文件。我只添加了一个引用MyLoader——我实际上并没有实例化或修改它。也就是说,在A's 代码中的某处(B加载之前),我有:

MyLoader;

我(显然)也导入了Class。这确保了MyLoader's 二进制文件将包含在A's.swf中。

只是MyExternalLibary.MyLoaderAbreakB的功能中引用MyLoader-- 所有加载的.swfsB都不会cast与其关联Class,尽管它是 aMovieClip并且具有所有正确的字段。此外,在调试器中,加载MovieClip的 s 表明它们是正确的Class. 例如,如果我加载 a .swf,它将是 a MovieClip; 此外,调试器声明它是 type B.mySwfs.MyClass,但我不能。我相信罪魁祸首是。castB.mySwfs.MyClassApplicationDomain

请注意,注释掉那行代码会使所有内容都B cast正确。

如果有人对正在发生的事情有任何想法,我希望得到一些建议。我认为这个问题处理ApplicationDomainA 拥有 MyExternalLibrary.MyLoader,并且我正在尝试将castaMovieClip加载A到 aClassB。当我注释掉对 in 的所有引用MyExternalLibrary.MyLoaderAB现在拥有 MyExternalLibrary.MyLoader,因此它能够转换为 in 中的类B。这是我的预感!

谢谢,

4

1 回答 1

0

解决方案是确保B's与'sApplicationDomain相同。这是通过参数化in或的实例来完成的。AApplicationDomainLoaderContextLoader.loadLoader.loadBytes

例如,使用以下代码行A加载:B

m_loader.load(new URLRequest("B.swf"), new LoaderContext(false, ApplicationDomain.currentDomain));

这会将所有BClass定义添加到A. 因此,当A加载 a.swf并将其MovieClipcast入 a Classin 时B,一切都会正常工作,因为AB在同一个ApplicationDomain. 因此,可以将Object加载的 by编辑为 in 中的 a 。AcastClassB

如果其他人遇到这个问题,我强烈建议看看 GreenSock 的 SWFLoader:http ://www.greensock.com/as/docs/tween/com/greensock/loading/SWFLoader.html

于 2012-07-24T18:08:07.650 回答