0

我有一个多人游戏大厅,用户可以在其中创建私人聊天室并开始私人游戏。每个用户在游戏中都有一个生命条,假设每秒缓慢地再生 x 点。

我想我需要在每个游戏开始时启动服务器端游戏循环,就像这样:

setInterval(update('gameID'),1000);

其中 update('gameID') 增加特定游戏中所有玩家的健康变量,其中 1000 毫秒 = 1 秒。

问题:我是否可以假设这是异步的?我可能有 50 个单独的游戏正在进行,其中 50 个正在运行。主进程不会被阻塞吧?

4

3 回答 3

1

它是异步的,但在您描述的情况下,您不需要 50 个计时器。

  1. 您可以使用单个计时器来重新生成活跃游戏中的玩家。如果您还推送健康数据,这将是非常低效的。
  2. 您可以执行类似的操作player.attackedTime = (new Date).getTime()并计算每次攻击的再生,例如player.health += x_points * ((new Date).getTime() - player.attackedTime) / 1000,但您必须在客户端上进行预测再生。
于 2012-06-12T14:06:26.313 回答
0

setInterval当然是异步的。大多数接受回调的函数都是异步的。如果您有任何疑问,可以查看文档或源代码。

于 2012-06-12T13:31:39.123 回答
0

它是异步的。但是这样做可能会杀死您的服务器。

我建议让这些间隔被动,即在内存中保存游戏的开始并让客户端 ping 数据。当客户端 ping 服务器检查当前日期并将其与存储的日期进行比较(并在请求结束时更新存储的日期)。它可以从中评估当前的健康状况。

该解决方案应该可以更好地扩展。

于 2012-06-12T13:35:20.103 回答