ActionScript 3 被遗忘的事件监听器

示例

addEventListener(Event.ENTER_FRAME,moveChild);
function moveChild(e:Event):void {
    childMC.x++;
    if (childMC.x>1000) {
        gotoAndStop(2);
    }
}

此示例将移动childMC(Main在设计时添加到),但是gotoAndStop()如果childMC在第2帧上不存在该变量,则会在调用时立即抛出1009。主要原因是每当播放头通过关键帧(一个帧(不继承前一帧的对象集),方法是使用gotoAndStop(),gotoAndPlay()其中关键帧将目标帧与当前帧分开,或者如果SWF是动画,则通过正常播放将当前帧的内容销毁,并将新内容使用从GUI存储的数据创建。因此,如果新框架没有名为的子项childMC,则属性请求将返回null并引发1009。

如果添加两个事件侦听器,但仅删除一个,或将侦听器添加到一个对象,然后尝试从另一个对象删除,则适用相同的原理。removeEventListener如果对象未附加相应的事件侦听器,则该调用不会发出警告,因此请仔细阅读添加和删除事件侦听器的代码。

另请注意:使用Timer对象,调用setInterval()并setTimeout()创建事件侦听器,这些对象也应正确清除。