Actionscript 3 加载外部swf时发生闪存崩溃(以重启循环结束)

Actionscript 3 加载外部swf时发生闪存崩溃(以重启循环结束),actionscript-3,flash,flash-cs4,Actionscript 3,Flash,Flash Cs4,我与FlashDevelop合作,有两个主要项目,都是纯AS3项目 当尝试从主项目加载第二个项目时,我会遇到各种各样的错误 主项目的主类扩展了Sprite,“要导入”项目中的主类扩展了MovieClip。查看FD中调试窗口中swf的加载情况,一切似乎都很好: [SWF] 'pathToSwf'\secondProject.swf - 410 626 bytes after decompression. 如果我尝试将加载的swf分配给新创建的MovieClip,则会出现强制失败: swfCont

我与FlashDevelop合作,有两个主要项目,都是纯AS3项目

当尝试从主项目加载第二个项目时,我会遇到各种各样的错误

主项目的主类扩展了Sprite,“要导入”项目中的主类扩展了MovieClip。查看FD中调试窗口中swf的加载情况,一切似乎都很好:

[SWF] 'pathToSwf'\secondProject.swf - 410 626 bytes after decompression.
如果我尝试将加载的swf分配给新创建的MovieClip,则会出现强制失败:

swfContent = loader.content; // =>
Type Coercion failed: cannot convert Main@46c0201 to flash.display.MovieClip.
因此,按如下方式对加载的内容进行类型转换:

swfContent = loader.content as MovieClip;
删除该错误,但在尝试调用addChild时,我陷入了下一个陷阱:

Error #2007: Parameter child must be non-null.
为了解决这个问题,我尝试将加载器直接添加到我想要显示外部swf的容器中。这是真正有趣的问题开始的时候:

targetContainer.addChild(loader);
我的主应用程序现在挂起,在一个永无止境的循环中重新启动。我不知道为什么

所以我的问题是真的。我的外部swf如何加载,但又是空的。
当我自己运行外部swf时,它工作得非常好…

后一个问题很奇怪,但是首先尝试将swf内容的类型更改为
Sprite
。主类并不总是扩展
MovieClip
,从错误消息判断,它在这种情况下确实不扩展。

后一个问题很奇怪,但首先尝试将swfContent的类型更改为
Sprite
。主类并不总是扩展
MovieClip
,从错误消息判断,在这种情况下它确实不会扩展。

使用
loader.content
上的函数(即使必须)来获取其确切的类型信息

loader.content as MovieClip
返回
null
,因为
loader.content
不是
MovieClip
-使用
as
关键字进行强制转换失败时,会自动返回
null
。是否有可能加载的内容是AS2电影剪辑而不是AS3电影剪辑?在这种情况下,
getQualifiedClassName
将返回
“AVM1Movie”
使用
loader.content上的函数(即使您必须这样做),以获取其确切的类型信息


loader.content as MovieClip
返回
null
,因为
loader.content
不是
MovieClip
-使用
as
关键字进行强制转换失败时,会自动返回
null
。是否有可能加载的内容是AS2电影剪辑而不是AS3电影剪辑?在这种情况下,
getQualifiedClassName
将返回
“AVM1Movie”
如果您的
swfContent
无法转换到
MovieClip
,则它将为空。这就是当类型强制失败时,
as
操作符应该如何工作的

按如下方式修改分配操作:

var swfContent :MovieClip = MovieClip(loader.content);

您可能希望将赋值包含在
try…catch
块中,因为失败时会抛出错误,而不是将
swfContent
设置为null,就像
as

您的
swfContent
如果无法转换为
MovieClip
,则将为null。这就是当类型强制失败时,
as
操作符应该如何工作的

按如下方式修改分配操作:

var swfContent :MovieClip = MovieClip(loader.content);

您可能希望将赋值包含在
try…catch
块中,因为失败时会抛出错误,而不是将
swfContent
设置为null,就像
as

一样,因此问题是加载的swf的主类与加载的swf同名。这导致当flash试图执行加载的swf时,它实际上调用父主类,从而导致循环行为

为避免此问题,建议更改解决此问题的应用程序域

loader = new Loader();
var AD:ApplicationDomain = new ApplicationDomain( null );
var context:LoaderContext = new LoaderContext( false, AD );
loader.load(new URLRequest(path), context);

所以问题是我加载的swf的主类与我从中加载的swf同名。这导致当flash试图执行加载的swf时,它实际上调用父主类,从而导致循环行为

为避免此问题,建议更改解决此问题的应用程序域

loader = new Loader();
var AD:ApplicationDomain = new ApplicationDomain( null );
var context:LoaderContext = new LoaderContext( false, AD );
loader.load(new URLRequest(path), context);

谢谢你的回答!在本例中,我显式地让我的主类扩展MovieClip,因此我假设它将以这种方式工作。。。奇怪的是,当我追踪loader.content时,我得到了[objectmain]。。。有什么想法吗?但是,尝试你的建议(…作为Sprite),我直接进入了一个奇怪的循环,这个循环一直在重新启动我的应用程序…你能控制加载的SWF吗?问题可能就在那里。谢谢你的回答!在本例中,我显式地让我的主类扩展MovieClip,因此我假设它将以这种方式工作。。。奇怪的是,当我追踪loader.content时,我得到了[objectmain]。。。有什么想法吗?但是,尝试你的建议(…作为Sprite),我直接进入了一个奇怪的循环,这个循环一直在重新启动我的应用程序…你能控制加载的SWF吗?问题可能就在这里。把它当精灵来玩就成功了,但还是让我陷入了这样一种奇怪的境地,因为某种原因应用程序一直在重启。这就是我调用addChild()方法的时候。。。有什么想法吗?QualifiedClassName=Main QualifiedSuperClassName=Sprite感谢您的提示@托拜厄斯:关于重启问题——在不知道加载的SWF的情况下很难说。你有密码吗?在
事件中查找任何可疑的内容。添加了
事件。添加了\u到\u STAGE
处理程序;
事件中有任何提示。输入_FRAME
处理程序?这是我自己尝试加载的SWF,这是最奇怪的事情。你知道有哪种情况下SWF可以正常工作,可以自己玩,但不能加载?作为测试,我在FD中创建了两个小型AS3项目。一个只加载另一个,另一个只有两个矩形(都是在代码中创建的)。但我还是发现了r的同样问题