Node.js:setInterval的替代方案,对游戏循环更精确

Cap*_*ous 10 javascript timer game-loop node.js

我的设置是一个多人游戏,带有用于异步传输数据的套接字.

现在,由于游戏的本质,我有一个游戏循环,应该每隔500毫秒进行一次玩家更新(例如位置,外观......).

var self = this;

this.gameLoop = setInterval(function()
{   
    for (var i = 0; i < playerSize; i++)
    {
        self.players.get(i).update();
    };
}, 500);
Run Code Online (Sandbox Code Playgroud)

我目前正在使用setInterval,但当我做了大约200个连接的基准时,setInterval漂移到1000毫秒而不是500毫秒,这使得整个游戏看起来很滞后.不幸的是,对于少量玩家而言,它还不够准确.(请注意,更新调用最多只需要大约100毫秒)

所以在研究之后,似乎没有其他选择产生只处理定时机制的过程?还是有其他选择吗?

任何人都已经做过这个,或者可以提供一些基本的想法/解决方案来解决这个问题?

完整代码:

Game.prototype.start = function()
{
    var average = 0;
    var cycles = 10;
    var prev = Date.now();

    this.thread = setInterval(function()
    {       
        console.log("interval time="+(Date.now() - prev));
        prev = Date.now();

        var s = Date.now();

        // EXECUTE UPDATES
    for (var i = 0; i < playerSize; i++)
    {
        self.players.get(i).update();
    };

        average += (Date.now() - s);

        cycles--;
        if(cycles == 0)
        {
            console.log("average update time: " + (average/10) + "ms");
            average = 0;
                cycles = 10;
            }
    }, 500);
}
Run Code Online (Sandbox Code Playgroud)

arn*_*old 0

虽然我不处理游戏,但有一个比 setInterval 更好的选择,如此处所示。它在商业应用程序中对我来说效果很好。我希望这有帮助。