gpt4 book ai didi

flash - 动态加载 SWF 会导致先前加载的 SWF 行为异常

转载 作者:行者123 更新时间:2023-12-01 01:35:11 27 4
gpt4 key购买 nike

我在使用 Flash 和 Flex 时遇到了一个非常奇怪的问题。在某些情况下,如果同时加载了另一个 SWF,则在运行时(使用 Loader)加载的 SWF 中的影片剪辑似乎无法实例化。这是重现错误的程序的完整代码。它是使用 mxmlc 编译的,通过 Ensemble Tofino :

package 
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.system.*;

public class DynamicLoading extends Sprite
{
private var testAppDomain:ApplicationDomain;

public function DynamicLoading()
{
var request:URLRequest = new URLRequest("http://localhost/content/test.swf");
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onTestLoadComplete);
loader.load(request);
}

private function onTestLoadComplete(e:Event):void
{
var loaderInfo:LoaderInfo = LoaderInfo(e.target);
testAppDomain = loaderInfo.applicationDomain;

// To get the error, uncomment these lines...
//var request:URLRequest = new URLRequest("http://localhost/content/tiny.swf");
//var loader:Loader = new Loader();
//loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onTinyLoadComplete);
//loader.load(request);

// ...and comment this one:
onTinyLoadComplete();
}

private function onTinyLoadComplete(e:Event = null):void
{
var spriteClass:Class = Class(testAppDomain.getDefinition("TopSymbol"));
var sprite:Sprite = Sprite(new spriteClass());

sprite.x = sprite.y = 200;

addChild(sprite);
}
}
}

将第二个加载操作如上所示注释掉,代码就可以工作了。但是,如果第二个加载操作未注释并且 onTinyLoadComplete 在第二个 SWF 加载后运行,则包含 new spriteClass() 的行失败,但出现以下异常:

类型错误:错误 #1034:类型强制失败:无法将 flash.display::MovieClip@2dc8ba1 转换为 SubSymbol。
在 flash.display::Sprite/constructChildren()
在 flash.display::Sprite()
在 flash.display::MovieClip()
在 TopSymbol()
在 DynamicLoading/onTinyLoadComplete()[C:\Users\...\TestFlash\DynamicLoading.as:38]

test.swf 和 tiny.swf 是在 Flash CS4 中创建的。 test.swf 包含两个符号,都为 ActionScript 导出,一个称为 TopSymbol,另一个称为 SubSymbol。 SubSymbol 包含一个简单的图形(涂鸦),TopSymbol 包含一个 SubSymbol 的实例。 tiny.swf 不包含任何内容;它是发布一个新的、空的 ActionScript 3 项目的结果。

如果我修改 test.swf 以便不为 ActionScript 导出 SubSymbol,错误就会消失,但在我们的实际项目中,我们需要能够动态加载包含其他导出的 Sprite 类作为子类的 Sprite 类。

关于导致此问题的原因或如何解决此问题的任何想法?

编辑:有人建议 tiny.swf 可能包含一个与 test.swf 或父级 (DynamicLoading.swf) 中的类同名的类。它不是。正如我上面所说,我通过简单地发布一个全新的、空的 Flash CS4 项目,自己创建了 tiny.swf。这是 swfdump -D 的完整输出在 tiny.swf 上运行时:

[HEADER] 文件版本:10
[HEADER] 文件是 zlib 压缩的。比率:41%
[HEADER] 文件大小:1343
[HEADER] 帧率:30.000000
[HEADER] 帧数:1
[HEADER] 影片宽度:550.00
[HEADER] 影片高度:400.00
[045] 4 FILEATTRIBUTES as3 符号类
【04d】1284元数据
[009] 3 背景色 (ff/ff/ff)
[056] 11 场景描述
[001] 0 展示框 1 (00:00:00,000)
[000] 0 结束

最佳答案

当加载两个 swfs 时,我看到了时髦的行为。当两个 swf 具有同一类的不同版本时,就会出现问题。检查以确保 TopSymbol 中的 SubSymbol 实例与您直接加载的 SubSymbol 相同。

关于flash - 动态加载 SWF 会导致先前加载的 SWF 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2526327/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com