проверить состояние клавиатуры без использования KeyboardEvent в AS3 - PullRequest
3 голосов
/ 10 апреля 2010

Можно ли проверить наличие нажатых клавиш без использования KeyboardEvent?

У меня есть настройка события ENTER_FRAME, которая называется enterFrameHandler, и я хочу проверить в функции enterFrameHandler, нажаты ли какие-либо клавиши.

обычно при использовании KeyboardEvent я мог легко проверять наличие ключей, используя переключатель, который проверяет KeyCode события, но в событии ENTER_FRAME это невозможно для меня.

Есть ли другой способ проверить состояние клавиатуры в событии ENTER_FRAME?

UPDATE: Я нашел этот скрипт AS2:

onClipEvent (enterFrame) {
    if (Key.isDown(Key.LEFT)) {
        _x -= power;
    }
    if (Key.isDown(Key.RIGHT)) {
        _x += power;
    }
    if (Key.isDown(Key.UP)) {
        _y -=power;
    }
    if (Key.isDown(Key.DOWN)) {
        _y +=power;
    }
}

Кажется, это делает то, что я хочу, но это в AS2, кто-нибудь знает, как "перевести" это в AS3?

Ответы [ 3 ]

5 голосов
/ 12 апреля 2010

Сохранение состояний ключей в словаре или объекте:

stage.addEventListener(KeyboardEvent.KEY_UP, keyHandleUp);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandleDown);

private var hash:Object = {};

private function keyHandleUp(event:KeyboardEvent):void {
    delete hash[event.keyCode];
}

private function keyHandleDown(event:KeyboardEvent):void {
    hash[event.keyCode] = 1;
}

private function isKeyDown(code:int):Boolean {
    return hash[code] !== undefined;
}
0 голосов
/ 10 апреля 2010

С добавленным на сцену слушателем KeyboardEvent.KEY_DOWN сохранение нажатой клавиши работает очень хорошо, поэтому нет необходимости в ENTER_FRAME.

private function keyDownHandler(evt:KeyboardEvent):void
{
    switch(evt.keyCode)
    {
        case 37: //left key
                trace("Move left");
            break;
        case 38: //up key
            trace("Move up");
            break;
        case 39: //right key
            trace("Move right");
            break;
        case 40: //down key
            trace("Move down");
            break;
    }

}
0 голосов
/ 10 апреля 2010

Короткий ответ - нет Почему вы не хотите использовать прослушиватель событий KeyboardEvent?

...