Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测按下多个键以移动“a”;角色/玩家“;_Javascript_Jquery - Fatal编程技术网

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

Javascript 检测按下多个键以移动“a”;角色/玩家“;,javascript,jquery,Javascript,Jquery,我有一个到目前为止的示例,您需要单击“结果”窗口,以便按键移动角色(w、a、s和d键移动角色),同时请记住,这尚未经过浏览器测试,仅适用于少数现代浏览器 我现在可以让图像按需要上/下/左/右移动,并根据“健康状况”以特定的速度移动,并且使用一个好的工具,它也会随着鼠标旋转,因此它可以在鸟瞰式游戏中工作 现在,我对如何使图像沿对角线移动感到有点困惑,我尝试使用多个if语句链接可能的键组合,但总是需要最后按下一个键 我真的不知道如何解决这个问题,我是否需要将它们放入某种while循环中,以便在按下某

我有一个到目前为止的示例,您需要单击“结果”窗口,以便按键移动角色(w、a、s和d键移动角色),同时请记住,这尚未经过浏览器测试,仅适用于少数现代浏览器

我现在可以让图像按需要上/下/左/右移动,并根据“健康状况”以特定的速度移动,并且使用一个好的工具,它也会随着鼠标旋转,因此它可以在鸟瞰式游戏中工作

现在,我对如何使图像沿对角线移动感到有点困惑,我尝试使用多个
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制作游戏并不是制作游戏的最佳方法,它更像是一种实验

编辑


现在有了一个更具可操作性的、移动的角色,但移动过程中出现了延迟,因此为了进一步说明我的问题,是否有任何方法可以减少这种情况?

Jwerty是一个处理此类事情的很棒的库,我建议您查看它:


它也与jQuery兼容

这看起来是个有趣的项目,所以我很好奇,开始四处看看。我发现了一篇关于Quirksmode的文章,其中讨论了如何使用键码和字符码。我看到您正在检测大写和小写字母。下面的简介似乎表明这是不必要的。本文还提供了关于浏览器兼容性和浏览器与系统之间特殊密钥兼容性的重要文档。例如,Mac键盘上的命令按钮。这是怎么一回事?它是如何在各种浏览器中被检测和行为的

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

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

更新

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


呵呵-让小家伙到处跑很有趣。很酷的项目。对于查看此内容的人,请使用WASD移动角色,它也跟着鼠标移动。顺便说一句,我只能在IE9中使用此功能,而不能在Chrome或Firefox中使用。@Jleagle-你说得对,是的,虽然在Firefox中没有,但它可以工作。@AndyRose这可能是因为我使用的是CSS3
rotate
,这可能会导致问题。我还没有检查它的x浏览器兼容性。但是谢谢你指出:)哦,如果不是很明显的话,我希望你能做的是将所有当前按下的键保留在键数组中。然后迭代数组并为每个数组计算一个移动事件。我猜从技术上讲,你可以同时做一些奇怪的事情,比如上下同时按下,导致没有任何动作。用一个例子更新了小提琴。啊,这很有效!非常感谢。我可能需要稍微调整一下,让事情变得更顺利,但这肯定会让事情进展得更顺利!我会等待,看看是否有任何其他的答案与其他解决方案之前,我跳在一个标记为顶部,但这是非常感谢@HelloJoe-是的,我注意到在组合键之间切换时的行为并不平滑。我不知道为什么会这样。如果你找到一个补丁,请张贴它,因为我很想看到它!我会这样做:)这很奇怪,因为如果你刷新,同时按下s和D,然后释放s(保持按下D),它将平稳地从下/右转到右。但在那之后,它有延迟。我想它可能是带有
keyup
键的东西,它会自动删除。虽然我不完全确定,但我会继续尝试,这很有趣,混在一起看起来很有趣,这肯定会在某个时候派上用场,谢谢你:)
var keys = {};

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

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