Когда я вызываю функцию один раз, интервал в порядке, он добавляется и очищается, как предполагалось. Когда эта же функция снова вызвана, интервал называется сотнями раз. Как я могу остановить это поведение и что не так с моей функцией?Интервал внутри функции вызывает сотни раз
function draw(){
ctx.clearRect(0,0,width,height);
ctx.fillStyle = 'blue';
// Add cube width 5px
if(cube.width <= 300){
cube.width += 5;
}
// Draw it on the screen
ctx.fillRect(cube.x,cube.y,cube.width,cube.height);
// Create function b(e) to check cubes collision
function b(e){
var x = e.clientX - ctx.canvas.offsetLeft;
var y = e.clientY - ctx.canvas.offsetTop;
if(x >= cube.x && x <= cube.x + cube.width
&& y >= cube.y && y <= cube.y + cube.height){
ctx.canvas.removeEventListener('click',b,false);
level1();
return;
}
}
ctx.canvas.addEventListener('click', b, false);
// Set the interval to 60 FPS
var timer = setInterval(function(){
check += 1;
console.log(check);
if(check > 50){
return;
}
// Call again the same function
draw();
},1000/60);
}
Я подозреваю, что это Java-проблема, поэтому я думаю, что полотно не имеет ничего общего с этим.
Update Функция Я зову дро из (который находится внутри другой функции):
function a(e){
var x = e.clientX - ctx.canvas.offsetLeft;
var y = e.clientY - ctx.canvas.offsetTop;
if(x >= player.x && x <= player.x + player.width
&& y >= player.y && y <= player.y + player.height){
ctx.canvas.removeEventListener('click',a,false);
draw();
}
}
// Add the click event using the previous function
ctx.canvas.addEventListener('click', a, false);
вы создаете бесконечный цикл, даже если вы не объявили и не инициализировали контрольную переменную –
Это всего лишь часть всего программного обеспечения. Он работает отлично, но вы правы, если вы просто смотрите на этот кусок кода. – GSquadron
Так как я не вижу декларацию переменной проверки внутри функции draw, то она должна быть вне функции draw, и похоже, вы хотите вызвать функцию draw только 50 раз. Таким образом, вы можете очистить таймер, когда проверка станет больше 50, надеюсь, это вам поможет. –