Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash可以检测到多少按键?使用as3_Flash_Actionscript 3_Events_Keyboard - Fatal编程技术网

Flash可以检测到多少按键?使用as3

Flash可以检测到多少按键?使用as3,flash,actionscript-3,events,keyboard,Flash,Actionscript 3,Events,Keyboard,我正在开发一个小游戏。我使用以下代码检测播放机按下的键: private function onKeyDown(event:KeyboardEvent):void { //moviment keys if (event.keyCode == 37 || event.keyCode == 65) { this.leftKeyPressed = true; } if (event.keyCode == 39 ||

我正在开发一个小游戏。我使用以下代码检测播放机按下的键:

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;
        }

    }

基本上,射击键几乎一直被玩家按住。并且经常按下changeColorKey,但不能按住。在测试过程中,我注意到按住shootKey和右箭头,changeColorKey的onKeyUp事件不会被触发。按住向上或向下箭头键而不是向右箭头具有相同的效果。如果我按住左箭头键,事件将被触发。为什么会这样?我的代码有问题吗?

我建议使用Keypoll库,您可以在这里找到它:


至于您可以按住多少键,我不确定,但请尝试使用ctrl键,shift键通常不计入限制(我没有在Flash/ActionScript中测试过这一点)。

您看到的问题与代码无关,而与键盘有关。根据键盘技术的不同,您可以同时按下的键的数量和组合也不同。几年前,我编写了一个与您的代码非常相似的代码,我记得我遇到了与您提到的相同的问题,而我当前的键盘不再出现这种情况(看起来它最多可以支持五个同时出现的字母,而旧键盘支持三个)。

我相信这个问题也与硬件键盘有关。我自己在键盘上测试了代码,在非usb键盘上不能同时按3个以上的键

在您的示例中,这应该不是问题,因为您永远不需要按超过3个键。但是要小心!另一个限制似乎存在于硬件键盘中,它与您彼此按下的键的距离有关

例如,在尝试您的代码时,当我在正在输入的键旁边输入了另外两个键(意思是不断按下)时,我似乎无法接收到一个键(因此我希望接收该键的事件)。所以我相信这就是为什么你的代码只能使用左箭头键。你的向上、向下和向右箭头键可能,不知何故,太接近changeColorKey,因此,(我猜是因为电路是如何在键盘上完成的)它不能触发它的向上状态


尝试将shootKey和/或changeColorKey移到其他地方,再远一点,看看是否有效。

我尝试了KeyPoll类,它显示了按键的相同问题。好的,正确地设置闪光灯限制。您是否尝试使用ctrl和shift来实现某些功能?以及关于此问题的几篇文章(甚至包括如何破解键盘)。看起来usb键盘通常支持多达六个同时按键,所以如果你有一个旧键盘,这可能是升级它的好时机。