为什么这个物体加速?? setInterval不起作用

时间:2019-06-21 19:19:33

标签: javascript canvas

我在游戏中成为一名玩家,但我无法移动方法。当我单击D按钮时,播放器移动10像素,下一个D单击播放器将移动33像素; 我不知道为什么

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));

1 个答案:

答案 0 :(得分:0)

首先定义Move,然后将其设置为keydown事件的处理程序,这样就不会为每个间隔都创建一个新的处理程序。

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

    this.Move = 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;
            }
    }
    
    window.addEventListener("keydown", this.Move, true);
    
    this.Draw = function(){
        ctx.fillStyle="color:white";
        ctx.fillRect(x,y,80,80);
    }
}

setInterval(GameLoop,(1000/60));