Почему этот объект ускоряется ?? setInterval не работает - PullRequest
0 голосов
/ 21 июня 2019

Я играю в игру и не могу сделать ход.Когда я нажимаю кнопку D, игрок перемещается на 10px, следующий игрок D click перемещается, например, на 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));

1 Ответ

0 голосов
/ 21 июня 2019

Сначала определите 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...