创建一个带有setInterval块的JS函数,直到timer消失

Make a JS function with setInterval block until timer disappears

本文关键字:函数 JS 块的 直到 消失 timer setInterval 一个 创建      更新时间:2023-09-26

我编写了以下函数作为游戏模拟的一部分:

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()需要递归调用,您需要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(),参数可以是你想让它运行多少次