1

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

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

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

4

1 回答 1

2

正如@David 发现的那样,这个问题被称为键盘重影

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

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

于 2016-05-16T10:30:14.490 回答