现在的位置: 首页 > 综合 > 正文

加载含有stage代码的swf

2017年12月07日 ⁄ 综合 ⁄ 共 850字 ⁄ 字号 评论关闭

加载一个“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);
}

抱歉!评论已关闭.