太空团队如何运作?

Ric*_*nes 6 networking adhoc game-development wifi ios

对于那些不知情的人来说,Spaceteam是一款非常受欢迎且非常有趣的 iOS 多人游戏。

它允许在 ad-hoc Wifi 网络上的多个设备之间进行实时游戏——它是如何做到的?

是否有已发布的库描述如何在 ad-hoc 网络库之上构建协议?它是特定于 iOS 的,还是可以跨不同平台构建各种应用程序?

快点,在我们撞上小行星之前回答!

tc.*_*tc. 3

具体您对哪一方面感兴趣?移动设备或ad hoc Wi-Fi 网络没有什么特别之处(除了在ad hoc网络中,并非所有设备都能够相互通信,因此某些网状网络可以提供帮助,但在正常情况下会不必要地使问题复杂化)。

我会先回答更广泛的问题,因为它更有趣。根据我的经验,有几个主要考虑因素:

  • 服务器/客户端还是点对点?我的意思是是否有一个“大师”决定世界的真实状态并将其传达给所有客户。Avara是我所知道的唯一一款在这个意义上是“点对点”的游戏(点对点向所有其他点发送命令;事实证明,这对于 6 人游戏的调制解调器用户来说会占用大量带宽)。我不知道有哪些游戏使用更复杂的网络拓扑来传达游戏状态(例如,仅向每个 LAN 上的一个客户端发送数据)。
  • 对于延迟,您会采取什么措施?《Avara》是我所知道的唯一一款在“延迟容忍度”方面落后于本地每个人的游戏,以便获得一致的世界状态,如果有人使用调制解调器,这会很糟糕(关闭压缩有很大帮助)。有多种方法可以进行“延迟补偿”(例如在《半条命》 /CS 中),其中一些方法也适用于点对点游戏。
  • 时间同步?对于客户端-服务器游戏,您至少需要担心 RTT 的变化。对于点对点游戏,我认为您还想就最小化有效最大延迟的时间达成一致。
  • 如果客户对世界现状存在不同意见怎么办?Avara 只是让对等点决定自己的世界状态(如果感知到不匹配,则显示“检测到现实碎片”,这可能是由于丢包或“延迟容忍度”太低而发生)。
  • 如果球员离开怎么办?对于 P2P 游戏,您可能必须就一致的游戏状态达成一致(例如,如果玩家在向其他对等点的子集发送命令后断开连接)。对于客户端-服务器游戏,您可能必须选择一个新的主人。

现在,在观看《太空小队》预告片后:

我不知道它是如何工作的,因为我还没有对协议进行逆向工程。然而,制作出足够好用的东西非常简单:

  • 使用某种 P2P 发现来寻找玩家(例如 Bonjour;应该有大量的文档和示例)。
  • 与同行交流。我已经在 iOS 3/4 左右使用 GameKit 完成了此操作(我不确定它是否仍然可以通过 Wi-Fi 运行)。
  • 选出一位大师。这可以很简单,就像谁按下“准备好”最后一次尝试成为主人一样。在某些边缘情况下,您可能必须处理失败。
  • 一切都让主人来决定吧。Spaceteam 对延迟不敏感;Wi-Fi 延迟往往最多只有几毫秒,如果一台设备慢了 100 毫秒,没有人会真正注意到(只要 UI 响应足够快)。