ApplicationDomain困扰。将本地.swfs从共享库动态加载到单独的项目中。失败的演员

时间:2012-07-23 15:41:18

标签: actionscript-3 flash flex adobe flash-builder

我有两个项目AB,它们引用了一个库MyExternalLibraryAB.swf个(两个不同的AS3项目),MyExternalLibrary.swc。运行我的应用程序后,A会加载B

Class中有MyLoaderMyExternalLibraryB广泛使用。 MyExternalLibrary.MyLoader加载我们服务器上存在的.swf(我们不会嵌入它们,因为它们是按用户请求动态加载的)。

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

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

MyLoader;

我(显然)也导入了Class。这可以确保MyLoader的{​​{1}} A中包含.swf的二进制文件。

仅使用MyExternalLibary.MyLoader引用A BMyLoader的功能,.swf加载B的所有cast尽管是Class且拥有所有正确的字段,但MovieClip并非MovieClip。此外,在调试器中,加载的Class显示它们是正确的.swf。例如,如果我加载MovieClip,它将是B.mySwfs.MyClass;此外,调试器声明它的类型为cast,但我不能B.mySwfs.MyClass它到ApplicationDomain。我相信罪魁祸首是B

请注意,注释掉该行代码会使cast ApplicationDomain中的所有内容正确无误。

如果有人知道发生了什么,我会喜欢一些建议。我认为这个问题涉及A 拥有 MyExternalLibrary.MyLoader后的cast,而我正在尝试MovieClip A加载Class B MyExternalLibrary.MyLoader A中的B。当我在MyExternalLibrary.MyLoader中注释掉B的所有引用时,{{1}}现在拥有 {{1}},因此它可以投射到{{1}}中的类1}}。那是我的预感!

谢谢,

1 个答案:

答案 0 :(得分:0)

解决方案是确保B的{​​{1}}与ApplicationDomain的{​​{1}}相同。这是通过在AApplicationDomain中参数化LoaderContext的实例来完成的。

例如,Loader.load使用以下代码行加载Loader.loadBytes

A

这会将B的所有m_loader.load(new URLRequest("B.swf"), new LoaderContext(false, ApplicationDomain.currentDomain));定义添加到B。因此,当Class加载A,而A.swf加载到MovieClip中的cast时,一切都会有效,因为{{ 1}}和Class属于同一个B。因此,A加载的B可以ApplicationDomain加入Object中的A

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