2012-10-23 100 views
1

在我的时间线的第一帧,我有以下动作脚本:如何删除一个事件监听,AS3

stop(); 

ClickTAG.addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true); 

function manageMouseOver(event:MouseEvent):void 
{ 
    play(); 
} 

我并不真正熟悉AS,但这个实现我想要的东西,即是在mouseOver上启动时间线。但是,如果您稍后重复mouseOver和关闭swf,则可能会在时间轴的后面中断动画,例如,它会跳过时间轴延迟并在最后一帧后重新开始播放动画。

如何在电影到达第二帧后删除此侦听器或阻止它运行?我不太了解AS的基本知识,所以谢谢你的帮助。

回答

1
function manageMouseOver(event:MouseEvent):void{ 
    event.currentTarget.removeEventListener(event.type, manageMouseOver); 
    play(); 
} 

这个简单的代码能够在被调用后立即删除事件。

+0

这是'removeEventListener',不' removeEvent'。此外,不要假定当前事件目标是首先添加事件侦听器的对象,它可能会有所不同。在OPs的情况下,它应该是'clickTAG.removeEventListener(MouseEvent.ROLL_OVER,manageMouseOver,false)',与写入完全相同(使用**标识监听器函数和'useCapture'标志来标识事件监听器,第三个参数到'addEventListener'和'removeEventListener')。可以分别在两个阶段添加相同的侦听器功能。 – amn

+1

@amn“另外,不要假定当前事件目标是首先添加事件侦听器的对象”=>请仔细阅读事件的AS3文档。 'currentTarget'总是你调用'addEventListener'的对象。不过,感谢您注意'removeEventListener'上的拼写错误。 – blue112

+0

谢谢!这工作完美。 –

1

便捷的方式在AS3

function manageMouseOver(event:MouseEvent):void 
{ 
    event.currentTarget.removeEventListener(event.type, arguments.callee); 

    play(); 
} 

删除事件侦听器有关详细信息arguments.callee docs

+0

谢谢,在addListener赋值中调用函数时调用外部方法/处理函数时非常方便。 – Mark

1

在你的情况下,从对象本身删除监听器:

stop(); 

ClickTAG.addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true); 

function manageMouseOver(event:MouseEvent):void 
{ 
    ClickTAG.removeEventListener(MouseEvent.ROLL_OVER, manageMouseOver) 
    play(); 
}