Game Kit Peer to Peer

时间:2011-10-27 14:07:57

标签: iphone ios networking gamekit

我编写了一个使用gamekit对等连接的炸弹人应用程序。问题是,一段时间后游戏不再同步。

我查看了GKTanks的示例代码并使用了他们的模型。同伴之间没有客户/服务器关系,所以我没有在我的游戏中使用一个。两个同伴都维持一个游戏状态,他们根据收到的数据更新。

我有一个NSTimer,用于在每一帧运行游戏循环。 NSTimers并不是同步的,所以有时游戏状态会变得与众不同:玩家大约在同一时间接通电源并且他们都获得了通电,因为发送数据需要一段时间。

我很感激任何关于让应用程序运行的想法。我正在考虑重写代码以使用客户端 - 服务器,但我不确定这是不是一个好主意......但是

谢谢!

编辑:我更改了代码,以便选择随机播放器作为主机。 每当玩家放置炸弹时,他会询问服务器放置它的位置。服务器返回玩家位置(如服务器上所示),然后告诉玩家放置炸弹的位置。

对于加电,服务器会检查玩家是否接通了电源,如果他这样做,则会发送一个通知他的数据包。

现在出现了另一个问题。设备之间的延迟很高(我正在使用蓝牙连接)。在客户端轻敲按钮放置炸弹后,放置炸弹大约需要0.2秒。

我可靠地发送所有数据。我这样做了吗?

2 个答案:

答案 0 :(得分:4)

你最好想要一个主机 - 客户关系,只有主机可以操纵游戏状态,所以在你的情况下它会是:

两位球员都急于加强力量。 主持人先拿起它 它被注册,主机收到电源 同时玩家#2也接通电源,将动作发送给主机 主机通知播放器#2上电已经消失。

根据你的情况,你必然会因丢包而失去灵感 由于主机 - 客户关系不可能发生,唯一的问题是当设备之间的延迟增加时,主机总是具有更大的优势,特别是在智能手机上。

在像炸弹人这样的游戏中,每次发生变化而不是执行的动作时发送整个游戏状态是完全合理的,这是为了确保两个设备同步。

总结一下:两个用户都拥有自己的游戏状态,但只有主持人可以操纵它们。

答案 1 :(得分:0)

你应该做什么:

  • 其中一个设备是主机,另一个是客户端
  • 主持处理所有游戏状态并做出决定,然后将整个游戏状态发送给客户
  • 客户端获取游戏状态并根据它绘制所有内容 - 它没有做出任何决定(谁选择了炸弹,炸弹爆炸等)
  • 客户端只是向主机发送输入(按左,右,暂停等)

就是这样。如果你试图在两台机器上做出决定,你会遇到很大的麻烦,试图让它们保持同步。