首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clearInterval不会阻止setInterval

clearInterval不会阻止setInterval
EN

Stack Overflow用户
提问于 2015-12-09 17:12:17
回答 2查看 320关注 0票数 1

我在javascript中有一个砖头游戏的游戏。问题是,即使全局声明了,我的clearInterval函数也不想停止。我在这里添加了画布函数,它每次调用setInterval时都呈现画布。

代码语言:javascript
复制
initbricks();
draw();
init_mouse();
var i = setInterval(draw,100);  

function play(){    
    document.getElementById("play").disabled = true;
}     

function reset(){
    clear();
    clearInterval(i);
}

//Initialize game
function init() {
    document.getElementById("play").addEventListener("click", play);
    document.getElementById("reset").addEventListener("click", reset);
}

//Load canvas after window has loaded
if (document.getElementById) window.onload=init;

function draw() {
    clear();
    circle(ballX,ballY,radius);  
    rect(paddlex, height-paddleh, paddlew, paddleh);

    //draw bricks
    for (i=0; i < NROWS; i++) {
        ctx.fillStyle = rowcolors[i];  
        for (j=0; j < NCOLS; j++) {
            if (bricks[i][j] == 1) {
                rect((j * (BRICKWIDTH + PADDING)) + PADDING, 
                     (i * (BRICKHEIGHT + PADDING)) + PADDING,
                     BRICKWIDTH, BRICKHEIGHT);
            }
        }
    }

    // hit brick?
    rowheight = BRICKHEIGHT + PADDING;
    colwidth = BRICKWIDTH + PADDING;
    row = Math.floor(ballY/rowheight);
    col = Math.floor(ballX/colwidth);
    // if so, reverse the ball and mark the brick as broken
    if (ballY<NROWS*rowheight && row>=0 && col>=0 && bricks[row][col]==1) {
        dy = -dy;
        bricks[row][col] = 0;
    }

    // if game not over, move paddle
    if (ballY+dy<height)
        if (rightDown && paddlex+paddlew<width)
            paddlex += 5;
        else if (leftDown && paddlex>0)
            paddlex -= 5;

    // Right/Left stop condition
    if (ballX+dx>width-5 || ballX+dx<5)
        dx= -dx;

    // Up stop condition
    if (ballY+dy<5)
        dy= -dy;

    // Down stop condition
    else 
        //i f ball is on the paddle
        if (ballY+dy>height-20 && ballX>paddlex && ballX<paddlex+paddlew) 
            dy= -dy;

    // if ball is not on the paddle
    else if (ballY+dy>height+20){
        // game over, so stop the animation
        clearInterval(i);
    }                                                 
    ballX += dx;
    ballY += dy;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-09 17:22:32

代码语言:javascript
复制
for (i=0; i < NROWS; i++) {

似乎变量i已被for循环所取代。

重命名您的间隔变量名

票数 2
EN

Stack Overflow用户

发布于 2015-12-09 17:21:54

您有多个名为i的变量,而draw函数中的一个变量没有得到一个var声明说明符,因此它正在覆盖您的计时器变量。

无论如何(双关不是故意的),您应该调查window.requestAnimationFrame来处理屏幕刷新,而根本不使用计时器。它会使你的游戏动画更加流畅。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34184871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档