我正在制作一个游戏,其中当用户按下空格键时,玩家会跳跃,因此其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;
}
});
}
答案 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 次)。