我有一个多人游戏游戏,用户可以创建私人聊天室并开始私人游戏。每个用户在游戏中都有一个健康栏,假设每秒慢慢再生x点。
我想我需要在每场比赛开始时启动服务器端游戏循环,这就是:
setInterval(update('gameID'),1000);
更新('gameID')增加1000 ms = 1秒的特定游戏中所有玩家的健康变量。
问题:我认为这是异步的吗?我可能会有50个单独的游戏,其中50个正在运行。主要过程不会被阻止吗?
答案 0 :(得分:1)
它是异步的,但在你描述的情况下你不需要50个定时器。
player.attackedTime = (new Date).getTime()
之类的操作,并计算每次攻击的重新生成,例如player.health += x_points * ((new Date).getTime() - player.attackedTime) / 1000
,但您必须在客户端进行预测性重新生成。答案 1 :(得分:0)
setInterval
当然是异步的。大多数采用回调的函数都是异步的。如果您有任何疑问,可以查看文档或源代码。
答案 2 :(得分:0)
它是异步的。但这样做会杀死你的服务器。
我建议将这些间隔设为被动,即将游戏的开始保持在内存中并使客户端ping数据。当客户端ping服务器检查当前日期并将其与存储日期进行比较时(并在请求结束时更新存储的日期)。它可以从中评估当前的健康状况。
此解决方案应该更好地扩展。