AS3事件和传递参数

时间:2011-07-11 02:46:53

标签: flash actionscript-3

我想在触发事件时传递参数。我的功能:

private function keyChange(e:KeyboardEvent, setValue:Boolean):void

这样我可以使用相同的功能来设置键是向上还是向下。我该如何编写事件监听器?我试过了:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyChange(,true));
然而,这不起作用。这可能吗?感谢

4 个答案:

答案 0 :(得分:1)

像这样:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyChangeHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyChangeHandler);

...

private function keyChangeHandler(e:KeyBoardEvent):void
{
    var keyDown:Boolean = e.type == KeyBoardEvent.KEY_DOWN;

    ...
    // Do stuff
}

但是,如果要传递参数,则需要使用自定义事件:

public class KeyBoardActionEvent extends KeyBoardEvent
{
    public var shouldSetValue:Boolean;
    public function KeyBoardActionEvent(setValue:Boolean, type:String, bubbles:Boolean = false, cancelable:Boolean = false):void
    {
        shouldSetValue = setValue;
        super(type, bubbles, cancleable);
    }
}

答案 1 :(得分:1)

直截了当的方法是检查事件处理程序中的事件。

stage.addEventListener(KeyboardEvent.KEY_UP, keyChange);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyChange);

private function keyChange(e:KeyboardEvent) {
    if (e.type == KeyboardEvent.KEY_DOWN) {
         // ... handle key down, etc...
    }
}

你也可以通过传递addEventListener一个传递你想要的参数的内联函数来做,或者用关闭做一些棘手的事情,但它不会通过上面的方式获得任何东西。

答案 2 :(得分:1)

完全可能。简单易行:

private function keyChange(setValue:Boolean):Function {
  return function(e:KeyboardEvent):void {
    // Now you have both "e" and "setValue" here
  }
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyChange(true));

如果您想稍后删除侦听器怎么办?只需取出keyChange()

var functionKeyChange:Function = keyChange(true);
stage.addEventListener(KeyboardEvent.KEY_DOWN, functionKeyChange);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, functionKeyChange);

如果您觉得此解决方案很有趣,请参阅this answer

答案 3 :(得分:0)

这是找到解决方案的最简单方法,

 stage.addEventListener(KeyboardEvent.KEY_DOWN,function(e:MouseEvent):void{keyChange(e,true)});