【问题标题】:How can I catch 2+ key presses at once?如何一次捕捉 2 次以上的按键?
【发布时间】:2014-01-24 13:39:36
【问题描述】:

最近我对创建 JS 游戏产生了兴趣。 (不是我有经验的领域,但我很感兴趣)。

我知道有几个用于 JS 的游戏引擎,但我真的不想创建游戏。相反,我很好奇事物是如何工作的/我如何创建一个。

我有几个问题:

  1. 有人对我在哪里可以阅读有关它的建议有建议吗?先决条件(需要什么知识)。

  2. 我尝试制作一个小游戏,让某物在一个长方形中行走。通过将 keyup 绑定到窗口并检查 event.which 以获取按下的键。我意识到,如果我同时单击 2 个按钮,则只有其中 1 个被注册。我该如何克服呢?

    $(window).keyup(function(event){
         globalEvent = event.which;
    
    });
    

【问题讨论】:

标签: javascript jquery game-engine


【解决方案1】:

直接回答你的第二个问题。

这是一种方法:

var keyPressed = {};

$(window).keydown(function(e) {
    keyPressed[e.which] = true;
}).keyup(function(e) {
    keyPressed[e.which] = false;
});

现在您可以随时使用keyPressed 来确定某个键是否按下:

// wherever
var key1 = 65, key2 = 66; // A and B
if (keyPressed[key1] && keyPressed[key2]) {
    // A and B are both being pressed.
}

【讨论】:

  • 我明白了,但是让例如说有人按住左键,然后在左键仍被单击时向上单击。接下来我将如何触发(如果)?这有意义吗?
  • 您可以附加另一个 keydown 事件并在该事件中检查是否通过 keyPressed 对象按下了两个键。
  • 我必须添加设置的时间间隔才能工作 - 除非有更好的方法?这是一个例子:jsfiddle.net/2Nn9T/2
【解决方案2】:

为了检测多个键被按下,使用 keydown 和 keyup 事件。

var keys = {};

$(document).keydown(function (e) {
    keys[e.which] = true;
});

$(document).keyup(function (e) {
    delete keys[e.which];
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2012-09-21
    • 2011-06-20
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多