我将以下函数作为游戏模拟的一部分编写:
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++;
}
答案 0 :(得分:0)
initialize()
,您需要setTimeout
而不是setInterval
:
function initialize(n) {
setMaxAgents($('#maxAgents').val());
initCanvas();
initSwarm();
renderSwarm();
date = new Date();
overallStartTime = date.getTime();
frames = 0;
if (n > 0) {
timerID = window.setTimeout(function () {
doFrame();
initialize(n--);
}, 25);
}
}
使用您希望它运行多次的参数调用initialize()
。