我有两个项目A
和B
,它们引用了一个库MyExternalLibrary
。 A
和B
是.swf
个(两个不同的AS3项目),MyExternalLibrary
是.swc
。运行我的应用程序后,A
会加载B
。
Class
中有MyLoader
,MyExternalLibrary
,B
广泛使用。 MyExternalLibrary.MyLoader
加载我们服务器上存在的.swf
(我们不会嵌入它们,因为它们是按用户请求动态加载的)。
请注意,我们的服务器包含A
,B
以及我们要下载的所有.swf
。
现在,A
还必须在我们的服务器上加载一些.swf
。因此,A
还必须在MyLoader
中使用MyExternalLibrary
。因此,在A
中,我添加了对MyLoader
的引用,以便在编译期间包含其二进制文件。我只添加对MyLoader
的引用 - 我实际上并没有实例化或修改它。也就是说,A
代码中的某处(加载B
之前),我有:
MyLoader;
我(显然)也导入了Class
。这可以确保MyLoader
的{{1}} A
中包含.swf
的二进制文件。
仅使用MyExternalLibary.MyLoader
引用A
B
个MyLoader
的功能,.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}}。那是我的预感!
谢谢,
答案 0 :(得分:0)
解决方案是确保B
的{{1}}与ApplicationDomain
的{{1}}相同。这是通过在A
或ApplicationDomain
中参数化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