gpt4 book ai didi

javascript - 如何更好地处理 Canvas 游戏中的玩家移动?

转载 作者:行者123 更新时间:2023-12-02 13:51:45 26 4
gpt4 key购买 nike

我有一个横向卷轴 spaceship 游戏,我一直在努力寻找一种有效处理玩家移动的方法。到目前为止,这是我从来源复制的代码:

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. 删除键[event.keyCode]是否只是删除键对象中包含该 keyCode 的任何属性?
  3. 实现玩家移动的更好方法是什么?

最佳答案

Why do I need to set keys[event.keyCode] as true? What does this statement do?

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

Does delete keys[event.keyCode] just delete any property that contains that keyCode in the key object?

它从 keys 对象中删除 event.keyCode 属性。例如,假设玩家之前按下了“A”或键代码 65。delete keys[event.keyCode] 相当于delete keys[65]。现在,keys 对象不再具有 65 属性,并且当您在 move 中检查它时,不会返回 true >.

What would be a better way to implement player movement?

你所做的非常合理,并且在很多游戏中都得到了应用。事实上,这是我在 wrote a game engine. 时使用的技术。

关于javascript - 如何更好地处理 Canvas 游戏中的玩家移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40983953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com