Обнаружение первого события нажатия клавиши только в AS3 - PullRequest
3 голосов
/ 24 марта 2011

В объекте KeyboardEvent, который я получаю при событиях нажатия клавиши, есть ли способ узнать, является ли событие первым нажатием клавиши, или повторяется, когда клавиша удерживается нажатой? Я хочу переключать настройки при нажатии клавиши; Я мог бы прослушать нажатие клавиши, но я бы предпочел, чтобы действие было выполнено, как только клавиша нажата ... до тех пор, пока я могу остановить его переключение назад и вперед при генерировании событий повторения нажатия клавиши.

Ответы [ 3 ]

8 голосов
/ 24 марта 2011

Проверено и работает

import flash.events.KeyboardEvent;

stage.addEventListener(KeyboardEvent.KEY_DOWN, onDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onUp);

var keys:Object = {};

function onDown(e:KeyboardEvent):void {
    if( ! Boolean(e.keyCode in keys)) {
        trace("First Time");        
        keys[e.keyCode] = true;
    }       
}

function onUp(e:KeyboardEvent):void {
    delete keys[e.keyCode];
}

Идея хранения кодов ключей в объекте и использования функции удаления по ключу изначально пришла из библиотеки Senoculars. Смотри http://www.senocular.com/flash/actionscript/

3 голосов
/ 24 марта 2011

Самое простое - удалить или отключить прослушиватель KEY_DOWN с флагом внутри прослушивателя KEY_DOWN, а затем добавить или включить его в KEY_UP.

0 голосов
/ 13 декабря 2011
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

private function onKeyDown(event:KeyboardEvent):void
{
    if (event.keyCode == Keyboard.SPACE)
    {

        stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

        stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);

    }
}

private function onKeyUp(event:KeyboardEvent):void
{
    if (event.keyCode == Keyboard.SPACE)

        stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

        stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyUp);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...