【发布时间】:2015-02-05 23:59:07
【问题描述】:
我将 requestAnimationFrame 循环用于秒表和其他一些动画。我正在使用从 rAF 返回的时间戳来获取时间,但是当我停止循环以暂停计时器时,等待几秒钟,然后再次启动循环,计时器将显示总时间。
我需要能够暂停计时器并从暂停的时间继续。有没有办法在暂停计时器后重置时间戳变量? 如果您需要我发布我的一些代码,请告诉我,或者如果您需要我进一步解释自己,我会这样做。
编辑
var frames = 0,
startTime = null,
lastTime = null,
fps = 1000/120,
isRunning = false,
pTime = 0,
timeElapsed;
function loop(timeStamp){
if(!startTime) startTime = timeStamp;
var timeDiff = lastTime ? (timeStamp - lastTime) : fps,
timeScale = timeDiff / fps,
timeElapsed += (timeStamp - startTime)/1000,
lastTime = timeStamp;
if(isRunning){
requestAnimationFrame(loop);
gField.t.text = ++frames + "f / "+parseInt(timeElapsed - pTime)+"s = "+parseInt(frames/(timeElapsed-pTime)) + "fps\n"+(timeDiff).toFixed(2);
}
/*
canvas manipulation e.g.
particle.x += acc*timeElapsed;
*/
time.text = (timeElapsed).toFixed(2);
canvas.redraw();
};
此功能通过按钮事件处理程序触发。当isRunning为false时,循环将停止,但显然timeStamp会在再次调用循环时比之前增加。
【问题讨论】:
-
仅使用您的 rAF 进行绘图,为秒表使用单独的计时器(单独的绘图和计算)
-
是的,请发布您的代码(或至少是处理计时器的部分)
-
我为你编辑了问题
标签: javascript canvas timer requestanimationframe