我有一个侧滚动太空船游戏,我一直试图找到一种有效处理玩家运动的方法。到目前为止,这是我的代码,我已经从源代码中复制了:
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;
}
问题:
keys[event.keyCode]
设置为 true ?这个陈述是做什么的?delete keys[event.keyCode]
只删除密钥对象中包含该keyCode的任何属性吗? 答案 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.
时使用的技术