http://bbs.9ria.com/thread-136576-1-1.html
as AVM1Movie
var myLoader:Loader=new Loader();
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
myLoader.load(new URLRequest("source.swf"));
function onComplete(e:Event):void
{
var main:MovieClip = e.target.content as MovieClip;
addChild(main);
}
报错:
TypeError: Error #2007: 参数 child 不能为空。
换成普通的swf文件又会正常显示。囧~~
之后又出现了这个问题:
ArgumentError: Error #2180: 如果 AVM1 内容(AS1 或 AS2)已加载到 AVM2 (AS3) 内容中,则不可将其移动到 displayList 的其他部分。
经查过资料后已经解决!不过还不是很明白....
http://iagjiang.blog.163.com/blog/static/1658478020107532054124/
今天做一个东西时,无意中发现了这个问题。
问题描述:我们都知道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加载到显示列表,这样就不会出问题。
-----------------
使用AS2.0或1.0编写的swf是不可以加载AS3.0的。换句话说Flash 8&Flex 1.5及之前所有工具生成的swf都不可以加载(load)AS 3.0 swf的 使用AS3.0确实可以加载AS2.0 或者 1.0的swf。但是AS3.0不可以访问加载swf中变量和函数。为了方便理解,我们可以想成两个虚拟机并行工作,但是不能通信。事实上,我猜实现机制可能就和这个差不多。LocalConnection。