如何检测和映射同时按下的多个键

How to detect and map many keys being pressed at once

提问人:MWRazer 提问时间:10/19/2023 更新时间:10/19/2023 访问量:35

问:

我正在使用 keydown 和 keyup 事件来检测按键。但是当我按下 2 或 3 个或更多键并按住它们时,大多数时候它不会识别之后按下的任何键,直到我停止按住这些键。我希望同时检测任意数量的按键。

似乎我看过的所有其他帖子都只是关于弄清楚如何同时映射多个键,而不是关于我遇到的这个特定问题。

这就是我在代码中映射按键的方式:

// a map of press-able keys
const key = {
  w: false,
  a: false,
  s: false,
  d: false
};

document.addEventListener('keydown', function(e) {

  if (key[e.key.toLowerCase()] != undefined) {
    key[e.key.toLowerCase()] = true;
  }

});

document.addEventListener('keyup', function(e) {

  if (key[e.key.toLowerCase()] != undefined) {
    key[e.key.toLowerCase()] = false;
  }

});

例如,如果我同时按住 W、A、S 和 D,大多数时候,它只会识别我按下的前 2 或 3 个,而忽略最后一个 1 或 2(key.a 和 key.w 可能为 true,但 key.s 和 key.d 可能是 false,即使它们被按下)。

这个实现有问题吗?或者我在搜索中找不到的 keydown 事件是否有限制?能够同时检测多个密钥的潜在解决方案是什么?

JavaScript

评论

0赞 Douwe de Haan 10/19/2023
可能是硬件问题。在键盘上,可以按下的键数是最大数目的,通常键盘越便宜,可以同时按下的键就越少。在我这边,我可以同时按下所有四个键,最大值是七个。
0赞 MWRazer 10/19/2023
@DouwedeHaan可能是,虽然这有点奇怪,但考虑到这个数字对我来说似乎是波动的。有时我一次只能得到 2 把钥匙,很少能达到 ~8 把。不过,我会对此进行更多研究,在考虑这个问题时,我没有考虑硬件限制

答:

2赞 Dick Larsson 10/19/2023 #1

键盘重影:是电脑键盘无法准确记录同时按下键的现象,通常会影响游戏和打字体验。采用防重影技术通过确保正确识别多个按键输入来缓解此问题。

Microsoft提供了一个交互式演示,您可以使用它来测试您的键盘。https://www.microsoft.com/applied-sciences/projects/anti-ghosting-demo