Javascript keydown事件仅触发最多两个键

问题描述 投票:0回答:1

我有一个系统来捕获和注册箭头键输入。它一直工作到一定程度。只要按下两个或更少的按键,就可以正确注册是否同时按下了多个按键。如果第三个或第四个被压在一起,它会停止发射keydown事件。请参阅this jsFiddle并查看控制台的输出。

它是由浏览器设置的限制还是我的代码错误?任何帮助将非常感激。

这是代码:

var keysPressed = {
    37: false,
    38: false,
    39: false,
    40: false
};
var LEFT = 'left';
var RIGHT = 'right';
var UP = 'up';
var DOWN = 'down';
var ON = '_on';
var OFF = '_off'

document.addEventListener('keydown', function(evt){
    var keycode = evt.keyCode;
    if(!checkKeyPressed(keycode)){
        keysPressed[keycode] = true;
        switch(keycode){
            case 37: 
                registerInput(LEFT+ON);
                break;
            case 38:
                registerInput(UP+ON);
                break;
            case 39:
                registerInput(RIGHT+ON);
                break;
            case 40:
                registerInput(DOWN+ON);
                break;
            default:
                break;
        }
    }
});

document.addEventListener('keyup', function(evt){
    var keycode = evt.keyCode;
    if(checkKeyPressed(keycode)){
        keysPressed[keycode] = false;
        switch(keycode){
            case 37: 
                registerInput(LEFT+OFF);
                break;
            case 38:
                registerInput(UP+OFF);
                break;
            case 39:
                registerInput(RIGHT+OFF);
                break;
            case 40:
                registerInput(DOWN+OFF);
                break;
            default:
                break;
        }
    }
});

function checkKeyPressed(keycode){
    if (keysPressed === null) {
        return false;
    } else return keysPressed[keycode];
}

function registerInput(inputType){
    console.log(keysPressed);
    //Game.Engine.playerInput(inputType);
}
javascript browser keyboard keyboard-events dom-events
1个回答
2
投票

虽然这不一定是我实现它的方式,但我认为你的实现工作正常。

记住这一点:

不同的键盘将为其键提供不同的总线。 在更高质量的键盘上,每次可以按键盘的每个“区域”可以获得更多键... 但是,根据键盘的内容,键的打印方式,区域的划分方式等等,您将拥有更多或更少的键,可以在任何给定的位置一次使用。

例如,当我玩FPS游戏和类似动作游戏时,使用我的常规映射,我无法蹲伏,向前移动+向左移动,拉出排行榜并在键盘上同时重新加载。

无论我做什么,都会被忽视。

© www.soinside.com 2019 - 2024. All rights reserved.