首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么cancelAnimationFrame不工作?

为什么cancelAnimationFrame不工作?
EN

Stack Overflow用户
提问于 2015-05-18 02:16:05
回答 1查看 11.5K关注 0票数 3

请参阅此小提琴- http://jsfiddle.net/rnqLfz14/28/

[此代码不是我的- http://www.isaacsukin.com/news/2015/01/detailed-explanation-javascript-game-loops-and-timing ]

代码语言:javascript
复制
//....

function stop() {
    running = false;
    started = false;
    cancelAnimationFrame(frameID);
}

//...

function mainLoop(timestamp) {
    // Throttle the frame rate.
    if (timestamp < lastFrameTimeMs + (1000 / maxFPS)) {
        frameID = requestAnimationFrame(mainLoop);
        return;
    }
    delta += timestamp - lastFrameTimeMs;
    lastFrameTimeMs = timestamp;

    begin(timestamp, delta);

    if (timestamp > lastFpsUpdate + 1000) {
        fps = 0.25 * framesThisSecond + 0.75 * fps;

        lastFpsUpdate = timestamp;
        framesThisSecond = 0;
    }
    framesThisSecond++;

    var numUpdateSteps = 0;
    while (delta >= timestep) {
        update(timestep);
        delta -= timestep;
        if (++numUpdateSteps >= 240) {
            panic();
            break;
        }
    }

    draw(delta / timestep);

    T.textContent = timestamp;

    if (timestamp >= 6000.0) {
        T.textContent = "Stopped!";
        stop();
    }

    end(fps);

    frameID = requestAnimationFrame(mainLoop);
}
//...

cancelAnimationFrame函数不会停止动画循环。有什么建议吗?我已经挠了我的头很长一段时间了,现在,请提出任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-18 03:41:39

stop()的条件满足时,将调用stop(),但代码会继续,因此将请求一个新的rAF。

只需在stop调用后添加一个return以防止这种情况发生(或使用else):

代码语言:javascript
复制
...
if (timestamp >= 6000.0) {
    T.textContent = "Stopped!";
    stop();  // stop() is just a sub-routine here and will continue after being called
    return;  // <--- here
}
...
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30290404

复制
相关文章

相似问题

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