每次点击动画片段时我都会传递一些参数,而我却没有意识到如何删除它
my_mc.addEventListener(MouseEvent.CLICK, someFunct(1,1));
我认为这可行,但它不起作用......
my_mc.removeEventListener(MouseEvent.CLICK, someFunct)
答案 0 :(得分:1)
尝试stopImmediatePropagation();它将停止所有活动希望它会有所帮助
答案 1 :(得分:0)
我认为你发布的语法实际上并不起作用,除非someFunct本身返回一个实际的事件监听器函数(例外情况是Flex有一些东西会引起你可以做的错觉这个)。在任何情况下,如果远程工作已发布,您所拥有的或多或少是匿名函数。
您可以删除匿名函数的唯一位置是在侦听器中。但是,侦听器必须具有更常规的事件侦听器签名(具有作为事件的单个参数)。假设你代码中的某个地方有人看起来像那样:
protected function someFunct(param1:int, param2:int):void { return function(e:MouseEvent):void { e.target.removeEventListener(e.type, arguments.callee); trace('in listener', param1, param2); } }
如果您正在使用Flex,我认为没有办法找到创建匿名函数的位置以允许删除侦听器。有关这些内容的工作原理的更多信息,请尝试阅读this。
答案 2 :(得分:0)
我做了一些测试,并想出如何实现这一目标。下面是一个测试.as主文件,只需将它作为新.fla文件的主文档类并运行它。你可以清楚地看到它的运作。至于你的exaple,你可以用你的movieclip替换this.stage。
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class Main extends MovieClip {
public function Main() {
graphics.beginFill(0x000000, 1);
this.stage.addEventListener(MouseEvent.CLICK, someFunct(1, 1));
}
private function someFunct(p1:int, p2:int):Function {
return someFunct2
}
private function someFunct2(event:MouseEvent):void {
graphics.drawCircle(this.stage.mouseX, this.stage.mouseY, 50);
this.stage.removeEventListener(MouseEvent.CLICK, someFunct2)
}
}
}
如果这没有回答您的问题,请回复,或编辑您的问题,并澄清您真正想要的内容。谢谢