如何更好地处理画布游戏中的玩家移动?

时间:2016-12-05 21:46:58

标签: javascript canvas

我有一个侧滚动太空船游戏,我一直试图找到一种有效处理玩家运动的方法。到目前为止,这是我的代码,我已经从源代码中复制了:

window.addEventListener("keydown", keyDown);
window.addEventListener("keyup", keyUp);

setInterval(move, 33.3);

keys = {};

function keyDown(event){
    keys[event.keyCode] = true;
}

function keyUp(event){
    delete keys[event.keyCode];
}

function move(){
    if (65 in keys && player.x > 0)
        player.x -=5;
    if (68 in keys && player.x < 576)
        player.x +=5;
    if (87 in keys && player.y > 0)
        player.y -= 5;
    if (83 in keys && player.y < 576)
        player.y += 5;

}

问题

  1. 为什么我需要将keys[event.keyCode]设置为 true ?这个陈述是做什么的?
  2. delete keys[event.keyCode]只删除密钥对象中包含该keyCode的任何属性吗?
  3. 实施玩家移动的更好方法是什么?

1 个答案:

答案 0 :(得分:2)

  

为什么我需要将keys[event.keyCode]设置为true?这个陈述是做什么的?

从技术上讲,你不是。您只需在keys[event.keyCode]添加某些值即可。它正在做的是为您的keys对象添加一个与密钥代码匹配的密钥。这允许您稍后检查并查看玩家是否按下了该按钮。您还可以将值添加到数组或类似的东西。这只是一个简单的方法,可以查看是否按下了给定的键。

  

delete keys[event.keyCode]只删除密钥对象中包含该keyCode的任何属性吗?

它从event.keyCode对象中删除keys属性。例如,想象一下玩家之前曾经按过&#34; A&#34;或密钥代码65. delete keys[event.keyCode]相当于delete keys[65]。现在,keys对象不再具有65属性,并且当您在true中检查时,它不会返回move

  

实施玩家移动的更好方法是什么?

你所做的事情非常合理,并且在很多游戏中使用过。事实上,这是我在wrote a game engine.

时使用的技术