用JavaScript制作游戏,位置无法正确更新

时间:2019-05-25 19:07:36

标签: javascript

我正在制作一个游戏,其中当用户按下空格键时,玩家会跳跃,因此其y坐标减小1。但是,由于某些原因,多次调用我的movePlayer()函数会增加跳跃高度(第一次按下空格将导致y坐标的减小远小于第十次。有人可以帮我解决这个问题吗?谢谢!

this.interval = setInterval(movePlayer, 25);
...
function movePlayer() {
    if (player.y + player.radius < display.canvas.height) {
        player.y++;
    }
    document.addEventListener('keypress', function(event) {
    if(event.keyCode == 32) {
        player.y -= 1;
    }
    });
}

1 个答案:

答案 0 :(得分:2)

您已经声明多次调用我的movePlayer()函数会增加跳转高度

这是问题的根本原因。考虑movePlayer

function movePlayer() {
    if (player.y + player.radius < display.canvas.height) {
        player.y++;
    }
    document.addEventListener('keypress', function(event) {
        ...

这里的问题是,每次调用movePlayer时,都会在keypress事件上创建一个新的事件侦听器。

首次调用它时,推动空间将运行player.y -= 1;一次。

您已经第五次运行player.y -= 1; 5次了!

您只需要为keypress事件添加一次处理程序(除非您希望它运行 n 次)。