iphone多人游戏设计

时间:2011-01-12 13:58:57

标签: iphone multiplayer

我已经搜索并阅读了很多文章并查看了GKTank的苹果样本(无法查看有关我的问题的任何细节,似乎会在事件发生时处理)但我无法看到似乎回答以下的示例或教程

在蓝牙/互联网的多人游戏中(也许)你如何同步玩家互动,以便在考虑延迟等情况下发生正确的游戏结果......

例如:

向每个玩家A& A显示一个按钮。 B在通过蓝牙连接的两个独立设备上

玩家A按下按钮(玩家A正在托管游戏,因此延迟不是问题) 玩家B在玩家A之前按下按钮,但他与玩家A设备的连接至少有200毫秒的网络延迟

问题:即使玩家A的触摸请求首先到达游戏代码,游戏也需要知道玩家B先被按下 - 即对主办方没有任何好处。

我知道触摸事件有时间戳,因此我可以确保将播放器的实际时间从播放器B发送到游戏代码......但不确定这是否是正确的方法以及是否可以去哪里从那里..

我希望答案在于一些游戏时间周期,其中触摸不是立即处理,而是在游戏周期内...

对此的任何帮助或指向教程的指针或处理此问题的特定源代码都将受到赞赏。

亚当

2 个答案:

答案 0 :(得分:2)

您可能想在https://gamedev.stackexchange.com/上提出这个问题,因为这是关于多人延迟或延迟的一般性问题,而不是特别针对iPhone。

您可以使用时间戳来订购操作消息。我认为iPhone与AT& T维护的日期时间服务器同步。

答案 1 :(得分:1)

我没有创建多人游戏的实际经验。但正如大多数游戏开发问题的情况一样,我认为没有错误或正确,所以一些逻辑思维应该可以解决问题。

以下是您可能需要考虑的一些想法:

  • 即使玩家A的设备没有延迟,你也必须引入一些来补偿玩家B(反之亦然,因为从玩家B的角度来看,玩家A也迟到了)。
  • 因此,你需要引入某种“命令堆栈”来缓冲来自两个玩家的输入并在玩家有机会为游戏时间内的给定点贡献他们的输入后执行命令
  • 您可能希望引入ping命令来不时测量实际延迟
  • 只有一个设备(主机)应该测量延迟并将其通知客户端
  • 根据测量的延迟,计算堆栈中命令的时间偏移(相对于主机时间)或延迟(使用延迟将玩家B的时间戳转换为“本地”时间)
  • 尽可能保持延迟动态,以补偿不同的延迟(在整个会话期间保持测量延迟)
  • 如果实际等待时间超出计算出的延迟时间,则玩家B的命令可能会被推迟到堆栈中 - 确保它们无论如何都会被执行(此时可能会出现滞后)。
  • 您实际上需要两个“图层” - 输入图层,用于交换,缓冲和同步实际输入;以及游戏图层,用于接收来自输入图层的延迟命令

到目前为止,我的2美分; - )