Javascript 为什么CraftyJS/Chrome会限制并发按键事件的数量?

Javascript 为什么CraftyJS/Chrome会限制并发按键事件的数量?,javascript,google-chrome,keyboard,keyboard-events,craftyjs,Javascript,Google Chrome,Keyboard,Keyboard Events,Craftyjs,我正在尝试开发一款使用CraftyJS的游戏。我正在使用 狡猾的0.7.1 铬50.0.2661.94 视窗10 A 2016年戴尔XPS15 我注意到键盘事件的处理方式有些奇怪。 我猜这其中很大一部分与Chrome有关,甚至可能与Chrome有关 我的物理键盘,而这种狡猾只与我 使用它的API 首先,这是我的SSCCE。此代码在按键时将按键添加到按键数组中,在释放按键时将其删除,并每秒注销该数组 <!DOCTYPE html> <html lang="en"> &l

我正在尝试开发一款使用CraftyJS的游戏。我正在使用

  • 狡猾的0.7.1
  • 铬50.0.2661.94
  • 视窗10
  • A 2016年戴尔XPS15
我注意到键盘事件的处理方式有些奇怪。 我猜这其中很大一部分与Chrome有关,甚至可能与Chrome有关 我的物理键盘,而这种狡猾只与我 使用它的API

首先,这是我的SSCCE。此代码在按键时将按键添加到按键数组中,在释放按键时将其删除,并每秒注销该数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>keyTest</title>
    <script src="../crafty.js"></script>
    <script>
        window.onload = function(){
            Crafty.init(window.innerWidth, window.innerHeight, document.getElementById('game'));
            var keys = [];

            var keyDown = function(e){
                console.log("KeyDown " + e.key);
                keys.push(e.key);
            };

            var keyUp = function(e){
                console.log("KeyUp " + e.key);
                keys.splice(keys.indexOf(e.key), 1);
            };

            Crafty.e("Keyboard").bind("KeyUp", keyUp).bind("KeyDown", keyDown);
            Crafty.e("Delay").delay(function(){console.log(keys)}, 1000, -1);
        };

    </script>
</head>
<body>
<div id="game"></div>
</body>
</html>

关键测试
window.onload=函数(){
Crafty.init(window.innerWidth、window.innerHeight、document.getElementById('game'));
var键=[];
var keyDown=功能(e){
console.log(“KeyDown”+e.key);
按键。按(e键);
};
var keyUp=功能(e){
控制台日志(“KeyUp”+e.key);
键。拼接键(键。索引键(e键),1);
};
狡猾的.e(“键盘”).bind(“KeyUp”,KeyUp)。bind(“KeyDown”,KeyDown);
Delay(function(){console.log(keys)},1000,-1);
};
我注意到一些奇怪的行为:

  • 首先,看起来Crafty一次只能识别四个字母的按键,除非它们可以用右手和左手打字。例如,一次按住ASDFE会导致:
    [65、83、68、70]
    无论我如何用力敲击,E键都无法识别。但是,例如,如果我按下ASDFJKL,我会看到:
    [65,83,68,70,74,75,76]

  • 一次只能识别两个箭头键,除非第三个是向下箭头键。例如,按LEFT、UP、RIGHT可生成:
    [37,38]
    ,但按LEFT-DOWN-RIGHT可生成:
    [37,39,40]

这到底是怎么回事?我的猜测是,我的手指和我的JS之间有人试图巧妙地纠正错误的按键(打字错误),但我不知道是谁,我也不知道这是什么规则


编辑:我怀疑是键盘本身(或操作系统)未能发送这些键盘事件。但我仍在寻找一个好方法来证实这一点

正如@David所发现的,这个问题被称为:

“重影”是指当同时按下多个键时,某些键盘键无法工作的问题。那些没有出现在电脑上或似乎已经消失的按键被称为“幻影”。在大多数键盘上,甚至一些被明确宣传为“反鬼影”的键盘上,三种组合键都会出现这种情况。想象一下,在玩你最喜欢的电子游戏时,你不能(比如说)斜着跑,同时发射武器(比如同时按下a、w和g)。这是大多数现有键盘内部设计的结果


由于不是每个消费者都有游戏键盘(特别是没有这个问题),我想你唯一能做的就是设计你的游戏,而不需要同时按下三个或更多的键。

闻起来像是键盘鬼影。试着运行这个,看看它是否与你得到的结果相符。@mucaho,在做了更多的研究后,我认为是这个。谢谢你的链接。很高兴能证实我的怀疑。如果你把你的评论作为回答,我会接受的。