检测按下的多个键以移动“角色/玩家”

时间:2011-10-18 16:04:50

标签: javascript jquery

我有一个我到目前为止所得到的例子here (example 1),你需要点击'结果'窗口,这样键就会移动角色(w,a,s和d键移动另外,请记住,这还没有经过浏览器测试,只适用于少数现代浏览器。

我现在可以根据需要使图像向上/向下/向左/向右移动,并且根据“健康”它移动特定的速度,并且使用好的example I found它也会随着鼠标一起旋转,所以它适用于鸟瞰风格的游戏。

现在,我对如何使图像对角移动感到有点困惑,我尝试使用多个if语句链接可能的键组合,但它始终按下最后一个键。

我真的不知道如何解决这个问题,我是否需要将它们置于某种while循环中,以便在按下某个键时将其移向该方向?这会消除对角/多键按压的需要吗?

    if ((key == key_W && key == key_D) || (key == key_w && key == key_d) || (key == key_W && key == key_d) || (key == key_w && key == key_D)) {

        // Player Up/Right

    }

或者我是否需要设置某种数组以生成按下的键列表?

我理解并且我完全了解在Javascript / jQuery中制作游戏并不是制作游戏的最佳方法,它不仅仅是一项实验。

修改

现在有一个更可行,动人的角色here (example 2),但是这个动作有一个延迟,所以为了扩展我的问题,无论如何要减少它吗?

2 个答案:

答案 0 :(得分:4)

这看起来像一个有趣的项目,所以它让我很好奇,我开始环顾四周。我在Quirksmode上发现了一篇关于使用keycode vs字符代码的文章。我看到你正在检测大写和小写字母。以下模糊似乎表明这是不必要的。本文还提供了有关浏览器兼容性和浏览器与系统之间特殊密钥兼容性的重要文档。例如,Mac键盘上的命令按钮。它是什么?它是如何在各种浏览器中检测到并表现的?

  例如,小写字母“a”和大写字母“A”具有相同的字母   keyCode,因为用户按下相同的键,但不同   charCode因为结果字符不同。

http://www.quirksmode.org/js/keys.html

那么问题就变成了,你如何检测多次按键。我发现这个SO答案非常简单明了。

Can jQuery .keypress() detect more than one key at the same time?

var keys = {};

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

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

<强>更新

基本上我只是从上面引入了代码,删除了对角线代码并迭代了键数组以进行所有移动操作。

http://jsfiddle.net/mrtsherman/8NW2K/3/

答案 1 :(得分:3)

Jwerty是一个很棒的图书馆来处理这类事情,我建议你看一下:

https://keithamus.github.io/jwerty/

它也与jQuery兼容!