Сколько нажатых клавиш может обнаружить Flash? используя as3 - PullRequest
5 голосов
/ 01 декабря 2009

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

private function onKeyDown(event:KeyboardEvent):void {
        //moviment keys
        if (event.keyCode == 37 || event.keyCode == 65) {
            this.leftKeyPressed = true;
        }
        if (event.keyCode == 39 || event.keyCode == 68) {
            this.rightKeyPressed = true;
        }
        if (event.keyCode == 38 || event.keyCode == 87) {
            this.upKeyPressed = true;
        }
        if (event.keyCode == 40 || event.keyCode == 83) {
            this.downKeyPressed = true;
        }

        if (event.keyCode == this.shootKey) {
            this.shootKeyPressed = true;
        }
    }

Событие onKeyUp:

private function onKeyUp(event:KeyboardEvent):void {
        if (event.keyCode == 37 || event.keyCode == 65) {
            this.leftKeyPressed = false;
        }
        if (event.keyCode == 39 || event.keyCode == 68) {
            this.rightKeyPressed = false;
        }
        if (event.keyCode == 38 || event.keyCode == 87) {
            this.upKeyPressed = false;
        }
        if (event.keyCode == 40 || event.keyCode == 83) {
            this.downKeyPressed = false;
        }
        if (event.keyCode == this.shootKey) {
            this.shootKeyPressed = false;
        }
        if (event.keyCode == changeColorKey) {
            trace('color key released');
            trace(getTimer());
            this.changeColorKeyPressed = true;
        }

    }

В основном ShoockKey будет удерживаться игроком почти все время. И changeColorKey будет нажиматься очень часто, но не удерживаться. Во время тестирования я заметил, что при удержании стрелки и правой стрелки вниз события onKeyUp для changeColorKey не запускаются. Удерживание клавиши со стрелкой вверх или вниз вместо стрелки вправо имеет тот же эффект. Если я удерживаю левую клавишу со стрелкой, события запускаются. Почему это происходит? Что-то не так с моим кодом?

Ответы [ 3 ]

4 голосов
/ 01 декабря 2009

Проблема, которую вы видите, связана не с вашим кодом, а с клавиатурой. В зависимости от технологии клавиатуры количество и комбинации клавиш, которые вы можете нажимать одновременно, различаются. Я сделал код, очень похожий на ваш, пару лет назад, и я помню ту же проблему, о которой вы упомянули, хотя с моей нынешней клавиатурой это больше не происходит (кажется, что она может поддерживать до пяти одновременных букв, а старая поддерживает три) .

2 голосов
/ 02 декабря 2009

Я считаю, что проблема связана также с аппаратной клавиатурой. Я сам проверил код на своей клавиатуре и не могу одновременно нажимать более 3 клавиш на клавиатуре, отличной от USB.

Теперь в вашем примере это не должно быть проблемой, потому что вам никогда не нужно нажимать более 3 клавиш. Но будь осторожен! Есть еще одно ограничение в аппаратной клавиатуре, и оно связано с близостью клавиш, которые вы нажимаете друг с другом.

Например, при попытке вашего кода мне показалось, что я не могу получить KEY_UP, когда у меня есть две другие клавиши KEYed_DOWN (то есть постоянно нажимаются) рядом с той, которую я называю KEYing_UP (поэтому та, которую я хочу получить key_up событие для). Поэтому я считаю, что именно поэтому ваш код работает только с левой стрелкой. Ваши клавиши со стрелками вверх, вниз и вправо, возможно, каким-то образом слишком близки к changeColorKey, и из-за этого (я полагаю, из-за того, как выполняется схема на клавиатуре) он не может вызвать его состояние «вверх».

Попробуйте переместить ShockKey и / или changeColorKey куда-нибудь еще дальше и посмотрите, работает ли это.

1 голос
/ 01 декабря 2009

Я бы порекомендовал использовать библиотеку Keypoll, вы можете найти ее здесь: http://code.google.com/p/bigroom/wiki/KeyPoll.

Что касается того, сколько клавиш вы можете удерживать, я не уверен, но попробуйте использовать ctrl, shift, как обычно, не учитывается в пределе (я не проверял это во Flash / ActionScript).

...