加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

AS3加载AS2的swf文件报错

发布时间:2020-12-15 06:18:44 所属栏目:百科 来源:网络整理
导读:今天做一个demo,要用as加载一个swf,报错“ 如果AVM1 ? 内容 ( AS1 ? 或 ? AS2 ) 已加载到 ? AVM2 ?( AS3 )? 内容中 , 则不可将其移动到 ?displayList 的其他部分 ” 以下是在网上找到的解决方案 问题描述:我们都知道flash player有两个虚拟机AVM1和AVM

今天做一个demo,要用as加载一个swf,报错“如果AVM1?内容AS1??AS2已加载到?AVM2?(AS3)?内容中则不可将其移动到?displayList 的其他部分

以下是在网上找到的解决方案

问题描述:我们都知道flash player有两个虚拟机AVM1和AVM2。前者是flash player9以下的版本运行时所需要的,它用来解析as1和as2。后者是专门为as3开发的,用来解析as3。
我用flash player10加载了一个player8及以下的swf(2.0的),并且把content添加到显示列表中。结果就出现这样的问题。
ArgumentError: Error #2180: 如果 AVM1 内容(AS1 或 AS2)已加载到 AVM2 (AS3) 内容中,则不可将其移动到 displayList 的其他部分。
at flash.display::DisplayObjectContainer/addChild()
at flash.display::Stage/addChild()
at _fla::MainTimeline/com()
经测试,只有flash player10以上得版本会出这样的问题,换成9就没问题了。不知道player10是什么搞的,用的不是AVM2吗?也就是只要你用player 10加载player9以前版本发布的swf就会出错。?
问题分析:我们来看看错误描述,“如果 AVM1 内容(AS1 或 AS2)已加载到 AVM2 (AS3) 内容中,则不可将其移动到 displayList 的其他部分”。说明as1或as2已经加载进来了,只是有把它移动到其他的现实列表导致这样的问题。
问题解决:直接把加载swf的loader加载到显示列表,这样就不会出问题。
归根结底,ADOBE其实认为正规的做法是将loader直接作为displayObject进行addChild即可,通过建立中转的方式会导致这部分长驻内存,除非关闭FLASHPLAYER否则释放不了。

package
{
?import?flash.display.*;
?import?flash.display.Sprite;
?import?flash.events.Event;
?import?flash.net.URLRequest;
?public?class?Test?extends?Sprite
?{
??var?pictLdr:Loader;
??var?pictURL:String?=?"test.swf"
??var?pictURLReq:URLRequest;
??
??public?function?Test()
??
??{
???pictLdr?=?new?Loader();
???pictURLReq??=?new?URLRequest(pictURL)
???pictLdr.load(pictURLReq);
???pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE,?imgLoaded);?
??}
??
??function?imgLoaded(event:Event):void
??{
???this.addChild(pictLdr);?
??}
?}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读