flash – 动态加载SWF会导致先前加载的SWF出现异常
我遇到了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); } } } 如上所示注释掉第二个加载操作,代码可以工作.但是,如果取消注释第二个加载操作并且在加载第二个SWF后运行onTinyLoadComplete,则包含新spriteClass()的行将失败,并出现以下异常: TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::MovieClip@2dc8ba1 to SubSymbol. at flash.display::Sprite/constructChildren() at flash.display::Sprite() at flash.display::MovieClip() at TopSymbol() at DynamicLoading/onTinyLoadComplete()[C:Users...TestFlashDynamicLoading.as:38] test.swf和tiny.swf是在Flash CS4中创建的. test.swf包含两个符号,两个符号都是为ActionScript导出的,一个名为TopSymbol,另一个名为SubSymbol. SubSymbol包含一个简单的图形(涂鸦),TopSymbol包含一个SubSymbol实例. tiny.swf什么都没包含;它是发布一个新的空ActionScript 3项目的结果. 如果我修改test.swf以便不为ActionScript导出SubSymbol,则错误消失,但在我们的实际项目中,我们需要能够动态加载包含其他导出精灵类作为子节点的精灵类. 关于是什么导致这个或如何解决它的任何想法? 编辑:有几个人建议tiny.swf可能包含一个与test.swf或父类(DynamicLoading.swf)中的类同名的类.它不是.正如我上面所说,我通过简单地发布一个全新的空Flash CS4项目来创建tiny.swf.以下是在tiny.swf上运行时swfdump -D的完整输出: [HEADER] File version: 10 [HEADER] File is zlib compressed. Ratio: 41% [HEADER] File size: 1343 [HEADER] Frame rate: 30.000000 [HEADER] Frame count: 1 [HEADER] Movie width: 550.00 [HEADER] Movie height: 400.00 [045] 4 FILEATTRIBUTES as3 symbolclass [04d] 1284 METADATA [009] 3 SETBACKGROUNDCOLOR (ff/ff/ff) [056] 11 SCENEDESCRIPTION [001] 0 SHOWFRAME 1 (00:00:00,000) [000] 0 END 解决方法
我已经看到两个swfs加载时的时髦行为.当两个swfs具有相同类的不同版本时,会出现问题.检查以确保TopSymbol中的SubSymbol实例与您直接加载的SubSymbol相同.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |