【问题标题】:Why does CraftyJS/Chrome limit the number of concurrent key press events?为什么 CraftyJS/Chrome 会限制并发按键事件的数量?
【发布时间】:2016-09-06 08:34:29
【问题描述】:

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

  • 狡猾的 0.7.1
  • 铬 50.0.2661.94
  • Windows 10
  • 2016 年戴尔 XPS15。

我注意到键盘事件的处理方式有些奇怪。 我猜这很多都与 Chrome 甚至可能 我的物理键盘,Crafty 只与我相关 使用它的 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>

我注意到一些奇怪的行为:

  • 首先,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 之间的某个人正试图巧妙地纠正错误的按键(错别字),但我不知道是谁,也不知道有什么规则来管理这个。

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

【问题讨论】:

  • 闻起来像键盘重影。尝试运行此online demonstration of your keyboards inputs 并查看它是否与您获得的结果相对应。
  • @mucaho,经过更多研究,我认为是这样。感谢您的链接。能够证实我的猜想真是太好了。如果您发表评论作为答案,我会接受。

标签: javascript google-chrome keyboard keyboard-events craftyjs


【解决方案1】:

正如@David 发现的那样,这个问题被称为keyboard ghosting

“重影”是同时按下多个键时某些键盘键不起作用的问题。没有出现在计算机上或似乎消失的按键被称为“幻影”。在大多数键盘上,即使是一些明确标榜为“防重影”的键盘,也会发生许多三个组合键。想象一下在玩你最喜欢的电子游戏时,不能同时对角线跑和开火(比如同时按 a、w 和 g)。这是大多数现有键盘内部设计的结果...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-22
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多