gpt4 book ai didi

javascript - 为什么 cancelAnimationFrame 不起作用?

转载 作者:搜寻专家 更新时间:2023-10-31 22:42:34 25 4
gpt4 key购买 nike

引用这个 fiddle - http://jsfiddle.net/rnqLfz14/28/

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

//....

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 函数没有停止动画循环。有什么建议吗?我已经摸索了很长时间了,请提出任何建议,我们将不胜感激。

最佳答案

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

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

...
if (timestamp >= 6000.0) {
T.textContent = "Stopped!";
stop(); // stop() is just a sub-routine here and will continue after being called
return; // <--- here
}
...

Modified fiddle

关于javascript - 为什么 cancelAnimationFrame 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30290404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com