我有一个系统来捕获和注册箭头键输入。它一直工作到一定程度。只要按下两个或更少的按键,就可以正确注册是否同时按下了多个按键。如果第三个或第四个被压在一起,它会停止发射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);
}
答案 0 :(得分:2)
虽然这不一定是我实现它的方式,但我认为你的实现工作正常。
记住这一点:
不同的键盘将为其键提供不同的总线 在更高质量的键盘上,键盘的每个“区域”可以获得更多按键,一次可以按住... 但是,根据键盘的内容,键的打印方式,区域划分方式等等,您可以使用更多或更少的键,一次可以在任何给定的位置使用。
例如,当我玩FPS游戏和类似的动作游戏时,使用我的常规映射,我无法蹲伏,向前移动+向左移动,拉起排行榜并在我的键盘上同时重新加载。
无论我最后做什么都会被忽略。