我正在使用Nodejs构建游戏服务器。但是我在运行setTimeout时遇到问题可能是因为我不太了解游戏循环的概念。
这是我的代码:
let tickLengthMS = 1000 / 60;
let previousTick = Date.now();
export function gameLoop() {
const now = Date.now();
if (previousTick + tickLengthMS <= now) {
const delta = (now - previousTick) / 1000;
previousTick = now;
update(delta);
}
if (Date.now() - previousTick < tickLengthMS - 16) {
setTimeout(gameLoop);
} else {
setImmediate(gameLoop);
}
}
所以这是更新我的游戏的游戏循环。我需要运行另一个循环,以不同的频率/时间步长向客户端发送消息。
export function updateNetwork() {
pack = ...
socket.emit('update', pack);
setTimeout(updateNetwork, 1000 / 20);
}
然后我就跑了:
gameLoop();
updateNetwork();
但它永远不会运行第二个setTimeout
函数。我想知道第一个gameLoop函数是否阻塞了第二个setTimeout。但是不是setTimeout一个非阻塞方法吗? gameLoop函数是否等于其他语言(如java和C ++)中的while(true) {}
?
更新问题以制作两个循环。