每次单击影片剪辑时,我都会传递一些参数,但我不知道如何删除它
my_mc.addEventListener(MouseEvent.CLICK, someFunct(1,1));
我以为这可以工作,但它不工作......
my_mc.removeEventListener(MouseEvent.CLICK, someFunct)
每次单击影片剪辑时,我都会传递一些参数,但我不知道如何删除它
my_mc.addEventListener(MouseEvent.CLICK, someFunct(1,1));
我以为这可以工作,但它不工作......
my_mc.removeEventListener(MouseEvent.CLICK, someFunct)
尝试 stopImmidiatePropagation(); 它将停止所有事件
希望它会有所帮助
我做了一些测试并想出了如何做到这一点。下面是一个测试 .as 主文件,只要把它作为一个新的 .fla 文件的主文档类并运行它。你可以清楚地看到它在工作。至于你的例子,你可以用你的电影剪辑替换 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)
}
}
}
如果这没有回答您的问题,请回复评论,或编辑您的问题并澄清您真正想要的内容。谢谢你
我不认为您发布的语法实际上是有效的,除非 someFunct 本身返回一个作为实际事件侦听器的函数(例外是 Flex 在幕后有一些东西会造成您可以做到这一点的错觉)。无论如何,如果这是在远程工作,那么您所拥有的或多或少是一个匿名功能。
唯一可以删除匿名函数的地方是侦听器内部。但是,侦听器必须具有更传统的事件侦听器签名(具有单个参数,即事件)。假设在您的代码中某处有人看起来像这样:
受保护的函数 someFunct(param1:int, param2:int):void { 返回函数(e:鼠标事件):无效{ e.target.removeEventListener(e.type, arguments.callee); 跟踪(“在侦听器中”,param1,param2); } }
如果您使用的是 Flex,我认为没有办法找到创建匿名函数以允许删除侦听器的位置。有关这些东西如何工作的更多信息,请尝试阅读此。