6

对于那些不知道的人来说,Spaceteam是一款非常流行且非常有趣的 iOS 多人游戏。

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

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

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

4

2 回答 2

3

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

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

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

现在,在观看 Spaceteam 预告片之后:

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

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

Spaceteam 为 Unity 游戏制作了一个库。 https://github.com/hengineer/CaptainsMess

Spaceteam 的创建者还写了一篇关于 Spaceteam 网络的旧博客文章 http://spaceteamadmirals.club/blog/the-spaceteam-networking-post/


有一个 iOS 专用库,可以轻松连接附近的设备,称为 MultipeerConnectivity https://developer.apple.com/documentation/multipeerconnectivity


如果您想要跨平台工作的东西,我在这里有一个示例应用程序:https ://github.com/brendaninnis/LocalNetworkingApp ,我在这里详细解释:http: //brendaninnis.ca/connect-nearby-devices -part-1.html

于 2019-11-17T01:57:58.240 回答