被遗忘的事件监听器

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

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

如果添加两个事件侦听器,但只删除一个,或者将侦听器添加到一个对象,但尝试从另一个对象中删除,则同样的原则适用。如果对象没有附加相应的事件侦听器,removeEventListener 调用将不会警告你,因此请仔细阅读添加和删除事件侦听器的代码。

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