TypeError: Error #1009: 无法访问空对象引用的属性或方法。 MainTimeline/frame1

标签:
typeerrorerror1009maintimeline/frame1(removechildremoveeventlistener |
分类: FlashAs3.0 |
这几天做一个as3课件,遇到一些问题总结一下:
经验一、帧里写代码时,如果代码里用了addChild addEventListener方法,并且有跳转帧的动作,要特别注意了。
经验二、我在做这个东西时,要来回跳转帧,在运行时,出现下面的错误:
http://s7/mw690/4a9b5fcfhd12aba00ccd6&690Error
TypeError: Error #1009: 无法访问空对象引用的属性或方法。
一时弄不明白,是怎么回事,后来在百试上查了一下,解决了。
原因是:我用的一个mc这个元件在容器中不存在,它只在当前帧里。当跳转到n帧时是e.target.parent.gotoAndStop(n)时,就找不到对象mc了。
因此,在帧跳转之前,把侦听删除。我的和这个不同,我是删除了当前帧这个mc,然后再跳转就不出错了。
我的代码:
function shangye(me:MouseEvent):void {
removeChild(da33_mc); //后加的方法,必须的,不然出上面的错误
this.gotoAndStop("yiye"); 跳转帧
}
网上查的解决方法:
stop();
movieClip_1.addEventListener(Event.ENTER_FRAME,overHandler);
function overHandler(e:Event) {
if (e.target.currentFrame==e.target.totalFrames) {
movieClip_1.removeEventListener(Event.ENTER_FRAME,overHandler);
//张志晨:加上这行!!
e.target.parent.gotoAndStop(2);
}
}
经验三、在反复用addChild(mc),和removeChild(mc)时(指是同一个mc),当第一次创建实例后,removechild后,再addchild时,不要重新起变量名,如下:
第一次加载:
var mc:da=new da();
addChild(mc)
……
事件{removeChild(mc)}
再加载时写法:
var mc:da=new da();这是错误的写法,不能加var,切记。
mc:da=new da(); 正确写法
addChild(mc);
四、问题处理:
1118: 属于 static 类型 Object 的值的隐式强制指令的目标可能是非相关类型 flash.display:DisplayObject。
function ok(e:Event):void {
mainContainer.addChild(e.target); //这回引出上面的错误
}
处理:
function ok(e:Event):void {
var mv:MovieClip=e.target as MovieClip; //加上这句就可以了
mainContainer.addChild(mv); //这回引出上面的错误
}
以上我开发中的经验。