Game Kit Peer to Peer

sil*_*pop 5 iphone networking gamekit ios

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

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

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

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

谢谢!

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

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

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

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

Roh*_*han 5

最好您想要一种主机-客户端关系,其中只有主机可以操纵游戏状态,因此在您的情况下它将是:

两名玩家都急忙去加电。主人先接起来。
它被注册并且主机接收到电源。
同时,玩家#2 也获得了能量,将动作发送给主机。
主机通知玩家#2 道具已经消失。

根据您的情况,您必然会因丢包而导致不同步。
对于不可能发生的主机-客户端关系,唯一的问题是主机总是具有优势,当设备之间(尤其是智能手机)之间的延迟增加时,这种优势会变得更大。

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

总结一下:两个用户都有自己的游戏状态,但只有主机可以操纵两者。