加载一个“111.swf”文件,代码如下:
var loader:Loader=new Loader();
loader.load(new URLRequest("111.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,load_COM);
function load_COM(e):void
{
var mc:MovieClip=e.target.content;
addChild(mc);
}
代码看起来不错,但是报错了:“TypeError: Error #1009: 无法访问空对象引用的属性或方法。at 111_fla::MainTimeline/111_fla::frame1()”为什么呢?111.swf也是用AS3写的,里面只有一行代码:
stage.addChild(mc);
原因是:在111.swf的代码中使用了stage。
我们知道,Stage是是专门管理舞台的一个类,这个类只有一个唯一默认的实例——stage。stage这个唯一的实例称之为舞台,是所有显示对象的最终容器,在一个swf中,必定有一个stage也只能有一个stage。如果主swf加载外部的swf怎么办?外部的swf加载进来后,就象一个mc一样添加到主swf中,舞台只有一个,就是主swf那个。
那问题就明显了,既然舞台(stage)只有一个,被加载的swf中如果用了stage,在加载未完成前,舞台还没出现呢!stage当然就是“空对象”。
针对这个问题,在被加载的swf中代码要适当处理,注意:是被加载的swf哦,主swf代码不用变。被加载的swf代码如下:
if(stage)
{
stage.addChild(mc);
}else
{
addEventListener(Event.ADDED_TO_STAGE,addTo);
}
function addTo(e):void
{
stage.addChild(mc);
}