如何实现类似游戏网络模型的agar.io

时间:2016-05-09 14:01:45

标签: network-programming multiplayer

我想知道为agar.io这样的游戏实现网络模型的最佳方法是什么 - 我假设它是一个权威的服务器,但我想知道:

  1. 每个玩家“拥有”他的位置,并将其发送到服务器,或者每个玩家只是发送他的输入,并且一切都在服务器上具有完全权威性?
  2. 如何决定向哪个玩家发送哪些数据?我假设对于每个玩家我都必须迭代服务器中的所有玩家并检查他们当前(或很快)是否可见,如果是这样,开始在他们身上发送数据
  3. 实际碰撞发生在哪里,以及如何处理滞后?
  4. 我很清楚在FPS游戏中处理这个问题的方法(玩家预测,倒带重放,滞后补偿等) - 但它通常在更小的范围内完成,我认为更简单的解决方案就足够了对于像这样的休闲游戏,成千上万的并发玩家。

1 个答案:

答案 0 :(得分:1)

agario中的模型由两件事表示:

  1. 你可以看到其他玩家吃同样的点,这样就可以看出玩家正在接收所有玩家的位置(大约每秒5次),然后出现和消失的点都在客户端处理。如果没有处理客户端的点,那将花费巨大的带宽。这也意味着你会收到一条包含启动时所有点位置的消息,这是有道理的,因为并非所有的点都在开头
  2. 从玩家到服务器的输入被发送而不是位置,因为否则它将是非常可攻击的。然后在服务器上处理冲突的逻辑
  3. 如果其他玩家的输入在服务器获得之后从服务器广播(而不是位置)到客户端,那么小的差异就会像蝴蝶效应一样增加并导致混乱

    我很确定输入每秒只发送5次,因为有一个problem with websockets会导致每秒发送超过5次的数据包聚集在一起