如何同时捕捉两个或以上的按键?

4

最近,我对创建JS游戏感到很有兴趣(虽然我没有相关经验,但这个领域很吸引我)。

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

我有几个问题:

  1. Anyone with suggestions on where can I read about it? Prerequisite (what knowledge is needed).

  2. I tried making a small game of something walking in a rectangular. By binding keyup to the window and checking the event.which to get the key that was pressed. I realized that if i clicked on 2 buttons same time only 1 of them is being registered. how can i overcome that?

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

尝试使用keydown函数。这可能会解决多个按键的问题。 - CodeMouse92
1
按下 Nah 键没有任何区别。 - Neta Meta
刚刚发现了一个类似的问题:https://dev59.com/9G435IYBdhLWcg3wyzaa(不是重复问题) - CodeMouse92
可能是在jQuery上检测单个按键事件上的多个按键的重复问题。 - David Mulder
2个回答

5
直接回答你的第二个问题。以下是一种方法:
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.
}

我明白了,举个例子,如果有人按住左键,然后在左键仍被按住的情况下点击了上键,那么我该如何触发下一个(if)?这样说清楚了吗? - Neta Meta
你可以附加另一个 keydown 事件,并在该事件内通过 keyPressed 对象检查是否同时按下了两个键。 - itdoesntwork
我不得不添加setInterval才能使其正常工作 - 除非有更好的方法?这是一个例子:http://jsfiddle.net/2Nn9T/2/。 - Neta Meta

4
为了检测多个按键同时按下,使用keydown和keyup事件。
var keys = {};

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接