删除传递参数的事件函数

时间:2013-10-14 15:34:57

标签: actionscript-3 function events

每次点击动画片段时我都会传递一些参数,而我却没有意识到如何删除它

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

我认为这可行,但它不起作用......

my_mc.removeEventListener(MouseEvent.CLICK, someFunct)

3 个答案:

答案 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)
    }
}
}

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