Actionscript 3 应用领域的不幸。将本地.swfs从共享库动态加载到单独的项目中。失败的铸件
我有两个项目,Actionscript 3 应用领域的不幸。将本地.swfs从共享库动态加载到单独的项目中。失败的铸件,actionscript-3,flash,apache-flex,adobe,flash-builder,Actionscript 3,Flash,Apache Flex,Adobe,Flash Builder,我有两个项目,A和B,它们引用了一个库,MyExternalLibraryA和B是。swfs(两个不同的AS3项目)和MyExternalLibrary是。swc。当我的应用程序运行时,A加载B 在MyExternalLibrary中有一个Class,MyLoader,它被B广泛使用myexternalibrary.MyLoader加载服务器上存在的.swfs(我们不嵌入它们,因为它们是根据用户请求动态加载的) 请注意,我们的服务器包含A、B以及我们将要下载的所有.swf 现在,A还必须在我们的
A
和B
,它们引用了一个库,MyExternalLibrary
A
和B
是。swf
s(两个不同的AS3项目)和MyExternalLibrary
是。swc
。当我的应用程序运行时,A
加载B
在MyExternalLibrary
中有一个Class
,MyLoader
,它被B
广泛使用myexternalibrary.MyLoader
加载服务器上存在的.swf
s(我们不嵌入它们,因为它们是根据用户请求动态加载的)
请注意,我们的服务器包含A
、B
以及我们将要下载的所有.swf
现在,A
还必须在我们的服务器上加载一些.swf
s。因此,A
也必须在MyExternalLibrary
中使用MyLoader
。因此,在A
中,我添加了对MyLoader
的引用,以便在编译过程中包含其二进制文件。我只添加了一个对MyLoader
的引用——实际上我没有实例化或修改它。也就是说,在A
的代码中的某个地方(在B
加载之前),我有:
MyLoader代码>
我(显然)也导入类。这将确保MyLoader
的二进制文件将包含在A
的.swf
中
只要引用A
中的myexternalibary.MyLoader
就可以将B
的功能与MyLoader
--所有.swf
加载的B
将不会强制转换到其关联的类
,尽管它是电影剪辑
,并且具有所有正确的字段。此外,在调试器中,加载的MovieClip
s表明它们属于正确的类。例如,如果我加载一个.swf
,它将是一个MovieClip
;此外,调试器声明它的类型为B.mySwfs.MyClass
,但我无法cast
将其转换为B.mySwfs.MyClass
。我相信罪魁祸首是应用领域
请注意,注释掉这行代码会使B
中的所有内容正确地转换
如果有人知道发生了什么事,我希望得到一些建议。我认为这个问题涉及ApplicationDomain
,因为A
拥有myexternalibrary.MyLoader
,我正试图将AMovieClip
加载到B
中的类中。当我注释掉A
中对myexternalibrary.MyLoader
的所有引用时,B
现在拥有myexternalibrary.MyLoader
,因此它能够强制转换到B
中的类。这是我的直觉
谢谢,解决方案是确保B
的ApplicationDomain
与A
的ApplicationDomain
相同。这是通过在Loader.load
或Loader.loadeBytes
中参数化LoaderContext
的实例来实现的
例如,A
使用以下代码行加载B
:
m_loader.load(new URLRequest(“B.swf”)、new LoaderContext(false,ApplicationDomain.currentDomain))代码>
这会将所有B
类的定义添加到A
。因此,当A
加载A.swf
并且MovieClip
被转换为B
中的类时,一切都会工作,因为A
和B
在同一应用程序域中。因此,由A
加载的对象可以cast
转换为B
中的类
如果其他人遇到这个问题,我强烈建议大家看看GreenSock的SWFLoader:请澄清您的问题:如果SWFB
广泛使用MyLoader
类,为什么您必须在SWFB
中包含未使用的MyLoader
?您还声明SWFA
加载SWFB
——因此,在第2段中,您声明“B的代码中的某个地方(加载A之前)”。也许A和B在这个问题上混淆了?PS:一般来说,这样做没有副作用。。。除非您更改了SWC代码,并且仅重新编译SWC和SWFA
(例如)。SWCB
则有一个类的“过时定义”,可能会出现这种类型的问题。Sunil,我的目标是使用相同的类
,MyLoader
在A
和B
之间集成加载外部文件。目前,B
使用MyLoader
和A
使用一堆胡言乱语。在重构过程中,当A
中使用MyLoader
时,我遇到了许多错误(如上所述)。通过进一步的测试,我意识到添加的简单语句:MyLoader代码>到A
导致MyLoader
闯入B
。我没有对MyExternalLibrary
或MyLoader
进行任何更改,但我会确保A
和B
都引用了MyExternalLibrary
的新版本。作为提示,如果B只在A内执行,并且A和B都使用MyExternalLibrary,然后,您可以让B引用MyExternalLibrary作为外部(共享库),这样您就只能在A中编译它。这样您就可以确保B始终使用A对库的定义。另外,请查看ApplicationDomain文档,它们可能对您正在做的事情很有用。如何加载SWF?是否将它们加载到同一应用程序域?