1
我有以下功能写成游戏模拟的一部分:一旦没有呈现任何更多做一个JS功能在使用setInterval块,直到计时器消失
function initialize() {
setMaxAgents($('#maxAgents').val());
initCanvas();
initSwarm();
renderSwarm();
date = new Date();
overallStartTime = date.getTime();
frames = 0;
timerID = window.setInterval(doFrame, 25);
}
计时器清零。我想能够运行该功能n
倍,像这样:
for (var i = 0; i < n; i++) {
initialize();
}
然而,据initialize()
而言它只要定时器设置返回,因此运行10次仅仅只有结束最后一次迭代运行完成。
我怎么让initialize()
阻塞,直到定时器运行,这样我可以连续运行功能n
次?
编辑:
这是doFrame()代码。当条件满足时,它停止计时器。
function doFrame() {
date = new Date();
startTime = date.getTime();
moveSwarm();
renderSwarm();
if (numAgents == 0) {
window.clearTimeout(timerID);
//Calculate average frames per second
date = new Date();
var elapsedTime = (date.getTime() - overallStartTime)/1000;
frameRate = frames/elapsedTime;
} else if (frames % 5 == 0) {
calculateFramerate();
}
showFramerate();
frames++;
}
为什么要连续运行'initialize' 10次?似乎只需要调用一次或者想要重置所有内容(例如,为什么初始化画布10次?)如何重构您的代码,以便初始化只需运行一次,然后调用setInterval 'doFrame'在最后?也许我只是错过了... –
我们需要看到最终停止你的间隔计时器的代码。在那个代码中,你会再次调用initialize()来开始。 – jfriend00
啊,对不起,我会稍微更新一下doFrame()代码。原因是我正在做一些代码分析来测试我的渲染引擎 - 我计算代码的1次运行的平均FPS。我希望能够计算出超过'n'运行,以便我可以测试优化和什么 - 我希望有一个简单的方法,我可以做到这一点,而不会太多地混淆我的引擎的螺母和螺栓。 – javanix