Как запустить setInterval при нажатии кнопки, не нарушая функцию clearInterval внутри? - PullRequest
0 голосов
/ 02 мая 2019

У меня есть setInterval, который рисует мою игру со змеями, и каждый раз, когда змея "ест", у меня есть clearInterval, а затем переменная setInterval с отрегулированной скоростью.Исходный setInterval начинается при загрузке.Как я могу начать с нажатия кнопки?

Мои попытки поместить setInterval внутри кнопки и использовать функции сработали, заставив кнопку запустить setInterval, но это всегда нарушает мой clearInterval внутри рисованияфункция.

<button onclick="">Start game</button>

if (snakeX == food.x && snakeY == food.y){
            food = {
                x : Math.round(Math.random()*(cvsWidth/snakeWidth-1)),
                y : Math.round(Math.random()*(cvsHeight/snakeHeight-1))
            };
            score++;
            if (speed >= 40) speed = speed-3;
            clearInterval(interval);
            interval = setInterval(draw, speed);
        }else{

            //Remove last
            snake.pop();
        }

var speed = 140;

var interval = setInterval(draw, speed);

1 Ответ

0 голосов
/ 02 мая 2019

Если для атрибута onclick вашей кнопки установлено значение start(), то при нажатии кнопки будет вызываться start.

Я также объявляю interval как глобальную переменную, так как я думаю, что вам нужно, чтобы она была глобальной.

Затем, когда вызывается start, запускается интервал и помещается идентификатор интервала.в interval

var speed = 500;

function draw() {
  console.log("Running")
}


var interval;
function start() {
  //Prevent start from running twice.
  if(interval != null) return;
  interval = setInterval(draw, speed);

}
<button onclick="start()">Start game</button>
...