Ctrl и пробел, используемые в классе сценария Action? - PullRequest
0 голосов
/ 24 марта 2011

У меня есть оператор switch в моем классе сценария действия. У меня есть function onKeyDown(event: KeyboardEvent), который содержит оператор switch. Который управляет различными ключами. Но теперь я хочу обработать ту же функциональность, которую выполняет клавиша TAB , используя две клавиши CTRL и SPACE . Я хочу добавить еще регистр в своем операторе switch: сначала я нажал CTRL , а затем SPACE , затем вызывается определенная функция.

Кто-нибудь может сказать мне, как два ключа используются в моем операторе switch?

    private function onKeyDown(event: KeyboardEvent) : void{

        if (popUp.displayPopUp){
            switch (event.keyCode){
                case Keyboard.UP:
                case Keyboard.DOWN:
                case Keyboard.END:
                case Keyboard.HOME:
                case Keyboard.PAGE_UP:
                case Keyboard.PAGE_DOWN:
                    inputTxt.selectRange(text.length, text.length)
                    list.dispatchEvent(event)
                    break;
                case Keyboard.ENTER:
                    acceptCompletion();
                    break;
                case Keyboard.TAB:
                    if (requireSelection)
                        acceptCompletion();
                    else
                        popUp.displayPopUp = false
                    break;
                case Keyboard.ESCAPE:
                    popUp.displayPopUp = false
                    break;
                case Keyboard.CONTROL && Keyboard.SPACE:
                    if (requireSelection)
                        acceptCompletion();
                    else
                        popUp.displayPopUp = false
                    break;
            }
        }
    }  

Ответы [ 3 ]

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

Это довольно распространенная проблема.

event.keyCode даст вам только код клавиши для самой последней нажатой клавиши.Таким образом, вам придется хранить нажатия клавиш и отпускания клавиш.К счастью, AS3 - довольно приятная реализация Array, которая позволяет легко это сделать.

var _keys:Array;

addEventListener(KeyboardEvent.KEY_DOWN, keyDownEvent);
addEventListener(KeyboardEvent.KEY_UP, keyUpEvent);

function keyDownEvent(e:KeyboardEvent)
{
    // turn the key on
    _keys[e.keyCode] = true;

    // perform logic
    keyLogic()
}
function keyUpEvent(e:KeyboardEvent)
{
    // turn the key off
    _keys[e.keyCode] = false;
}
function keyLogic()
{
    // this is where the actual logic is
    if(_keys[Keyboard.SPACE] && _keys[Keyboard.CONTROL])
    {
        if (requireSelection)
            acceptCompletion();
        else
            popUp.displayPopUp = false
    }
}

Это позволяет вам иметь аккуратный маленький массив, который всегда сообщает вам, какие клавиши не активны.Он также отделяет логику вашей программы от логики ввода.Двойной выигрыш.

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

чехол Keyboard.SPACE: if (event.ctrlKey) {

} перерыв;

я думаю, что этот подход хорош ........

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

В вашем случае вы можете просто проверить ctrlKey свойство на KeyboardEvent . Но ответ @ DingoEatingFuzz позволит проверять такие комбинации, как «пробел» + «буква» и т. Д.

...