0

我有一个用于捕获和注册箭头键输入的系统。它一直有效。只要按下两个或更少的键,它就会正确记录是否同时按下多个键。如果同时按下第三个或第四个,它将停止触发 keydown 事件。请查看这个 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);
}
4

1 回答 1

2

虽然这不一定是我实现它的方式,但我认为您的实现工作得很好。

请记住这一点:

不同的键盘将有不同的按键总线。
在更高质量的键盘上,您可能会在每次可以按住的键盘“区域”中获得更多键......
但取决于键盘是什么,键的打印方式,区域的划分方式等等,您将拥有或多或少的钥匙,可以一次在任何给定的地方使用。

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

我最后做的任何事情都会被忽略。

于 2013-03-27T21:11:52.347 回答