0

每次单击影片剪辑时,我都会传递一些参数,但我不知道如何删除它

my_mc.addEventListener(MouseEvent.CLICK, someFunct(1,1));

我以为这可以工作,但它不工作......

my_mc.removeEventListener(MouseEvent.CLICK, someFunct)
4

3 回答 3

1

尝试 stopImmidiatePropagation(); 它将停止所有事件

希望它会有所帮助

于 2013-11-22T09:20:26.130 回答
0

我做了一些测试并想出了如何做到这一点。下面是一个测试 .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)
    }
}
}

如果这没有回答您的问题,请回复评论,或编辑您的问题并澄清您真正想要的内容。谢谢你

于 2013-10-15T00:01:04.807 回答
0

我不认为您发布的语法实际上是有效的,除非 someFunct 本身返回一个作为实际事件侦听器的函数(例外是 Flex 在幕后有一些东西会造成您可以做到这一点的错觉)。无论如何,如果这是在远程工作,那么您所拥有的或多或少是一个匿名功能。

唯一可以删除匿名函数的地方是侦听器内部。但是,侦听器必须具有更传统的事件侦听器签名(具有单个参数,即事件)。假设在您的代码中某处有人看起来像这样:

受保护的函数 someFunct(param1:int, param2:int):void {
    返回函数(e:鼠标事件):无效{
        e.target.removeEventListener(e.type, arguments.callee);
        跟踪(“在侦听器中”,param1,param2);
    }

}

如果您使用的是 Flex,我认为没有办法找到创建匿名函数以允许删除侦听器的位置。有关这些东西如何工作的更多信息,请尝试阅读

于 2013-10-14T18:18:21.590 回答