Javascript 为什么这个物体会加速??设置间隔不工作

Javascript 为什么这个物体会加速??设置间隔不工作,javascript,canvas,Javascript,Canvas,我在游戏中成为了一名球员,但我不会用移动法。当我点击D按钮时,玩家移动10px,下一个点击D按钮时,玩家移动例如33px; 我不知道为什么 function Player(){ let x = 0; let y = 0; this.Move = function(){ window.addEventListener("keydown", function (event) { switch (event.keyCode) {

我在游戏中成为了一名球员,但我不会用移动法。当我点击D按钮时,玩家移动10px,下一个点击D按钮时,玩家移动例如33px; 我不知道为什么

function Player(){
    let x = 0;
    let y = 0;

    this.Move = function(){
        window.addEventListener("keydown", function (event) {
            switch (event.keyCode) {
              case 87: //W
                console.log("w");
                break;
              case 83: //S
                break;
              case 65: //A
                x--;
                break;
              case 68: //D
                x++;
                break;
            }
          }, true);
    }
    this.Draw = function(){
        ctx.fillStyle="color:white";
        ctx.fillRect(x,y,80,80);
    }
}

setInterval(GameLoop,(1000/60));
首先定义Move,然后将其设置为keydown事件的处理程序,这样就不会为每个间隔创建新的处理程序。 函数播放器{ 设x=0; 设y=0; this.Move=functionevent{ 开关事件.keyCode{ 案例87://W console.logw; 打破 案例83://S 打破 案例65://A x-; 打破 案例68://D x++; 打破 } } window.addEventListenerkeydown,this.Move,true; this.Draw=函数{ ctx.fillStyle=颜色:白色; ctx.fillRectx,y,80,80; } }
setIntervalGameLoop,1000/60;什么是GameLoop?GameLoop是一个包含player.draw的函数;设置间隔的第一个参数应该是Player。它是否包含Player.Move?因此,每次触发间隔时都会添加另一个键事件处理程序?Move是如何调用的?这段代码有这么多未知因素。我猜你一次又一次地绑定事件处理程序。