我正在将事件监听器添加到25个动画片段中。如果使用其中一个,我想从所有这些事件中删除所有事件监听器。
var myMvc:movieclip;
myMvc.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent)
{
tasiSuruklemeyeBasla(e,myMvc,1,1);
IEventDispatcher(e.currentTarget).removeEventListener(e.type,arguments.callee);
});
答案 0 :(得分:1)
您在这里做的是为每个侦听器创建一个单独的匿名函数对象。这没有多大意义,因为事件处理程序的代码对于所有侦听器都是相同的。也许您正在尝试将一些数据与每个事件处理程序一起传递,以便能够分辨哪些剪辑已被触发。有很多更好的方法可以实现这一点,而无需为每个侦听器创建单独的处理程序。
无论如何,为了能够随时删除侦听器,您必须在某处保留对处理程序的引用。例如,您可以声明一个事件处理函数,并将其引用传递给所有侦听器(您最好在文档类或其他内容中声明它,但它也适用于时间轴代码)。
var eventHandler:Function = function(e:MouseEvent):void
{
var target:MovieClip = e.target as MovieClip;
tasiSuruklemeyeBasla(e,target,1,1);
target.removeEventListener(e.type,arguments.callee);
};
myMvc.addEventListener(MouseEvent.MOUSE_DOWN, eventHandler);
// you can do that any time
myMvc.removeEventListener(MouseEvent.MOUSE_DOWN, eventHandler);