AS3 События и параметры передачи - PullRequest
1 голос
/ 11 июля 2011

Я хочу передать параметры при срабатывании события.Моя функция:

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

, чтобы я мог использовать ту же функцию для установки, если клавиша вверх или вниз.Как бы я написал слушатель события?Я попытался:

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

однако это не сработало.Это возможно?Спасибо

Ответы [ 4 ]

1 голос
/ 23 ноября 2012

Вполне возможно.Легко и просто:

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() out:

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

Если вам интересно это решение, посмотрите этот ответ .

1 голос
/ 11 июля 2011

Простой способ - изучить события в вашем обработчике событий.

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 встроенную функцию, которая передает нужный параметр, или, возможно, сделаете что-то хитроес замыканиями, но это не даст вам ничего по сравнению с вышеуказанным способом.

1 голос
/ 11 июля 2011

Вроде так:

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);
    }
}
0 голосов
/ 15 июля 2011

Это самый простой способ найти решение,

 stage.addEventListener(KeyboardEvent.KEY_DOWN,function(e:MouseEvent):void{keyChange(e,true)});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...