我编写了一个使用gamekit对等连接的炸弹人应用程序。问题是,一段时间后游戏不再同步。
我查看了GKTanks的示例代码并使用了他们的模型。同伴之间没有客户/服务器关系,所以我没有在我的游戏中使用一个。两个同伴都维持一个游戏状态,他们根据收到的数据更新。
我有一个NSTimer,用于在每一帧运行游戏循环。 NSTimers并不是同步的,所以有时游戏状态会变得与众不同:玩家大约在同一时间接通电源并且他们都获得了通电,因为发送数据需要一段时间。
我很感激任何关于让应用程序运行的想法。我正在考虑重写代码以使用客户端 - 服务器,但我不确定这是不是一个好主意......但是
谢谢!
编辑:我更改了代码,以便选择随机播放器作为主机。 每当玩家放置炸弹时,他会询问服务器放置它的位置。服务器返回玩家位置(如服务器上所示),然后告诉玩家放置炸弹的位置。
对于加电,服务器会检查玩家是否接通了电源,如果他这样做,则会发送一个通知他的数据包。
现在出现了另一个问题。设备之间的延迟很高(我正在使用蓝牙连接)。在客户端轻敲按钮放置炸弹后,放置炸弹大约需要0.2秒。
我可靠地发送所有数据。我这样做了吗?
答案 0 :(得分:4)
你最好想要一个主机 - 客户关系,只有主机可以操纵游戏状态,所以在你的情况下它会是:
两位球员都急于加强力量。 主持人先拿起它 它被注册,主机收到电源 同时玩家#2也接通电源,将动作发送给主机 主机通知播放器#2上电已经消失。
根据你的情况,你必然会因丢包而失去灵感 由于主机 - 客户关系不可能发生,唯一的问题是当设备之间的延迟增加时,主机总是具有更大的优势,特别是在智能手机上。
在像炸弹人这样的游戏中,每次发生变化而不是执行的动作时发送整个游戏状态是完全合理的,这是为了确保两个设备同步。
总结一下:两个用户都拥有自己的游戏状态,但只有主持人可以操纵它们。
答案 1 :(得分:0)
你应该做什么:
就是这样。如果你试图在两台机器上做出决定,你会遇到很大的麻烦,试图让它们保持同步。