如果 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加载到显示列表,这样就不会出问题。

你可能感兴趣的:(display)