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)
| 归档时间: |
|
| 查看次数: |
4747 次 |
| 最近记录: |