當我調用一次函數時,間隔是可以的,它會按照假定的方式添加和清除。當再次調用相同的函數時,間隔被稱爲數百次。 如何停止此行爲以及我的功能出了什麼問題?函數內部的區間被稱爲數百次
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);
}
我懷疑這是一個JavaScript問題,所以我的猜測是帆布與此無關。
更新 我從調用平局(這是另一個函數內)的功能:
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);
你正在創建一個無限循環,即使你還沒有聲明和初始化檢查變量 – 2015-02-07 19:48:14
這只是整個軟件的一部分。它完美地工作,但如果你只是看着這段代碼,你是對的。 – GSquadron 2015-02-07 21:03:18
由於我看不到繪圖函數內的檢查變量聲明,因此它必須在繪圖函數之外,並且它看起來像只想調用draw函數50次。所以你可以在check超過50時清除計時器,希望它能幫助你。 – 2015-02-08 06:16:06