被遗忘的事件监听器
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()
也会创建事件侦听器,这些也应该正确清除。