我编写了一个使用GameKit点对点连接的炸弹人应用程序。问题在于一段时间后游戏不再同步。
我查看了GKTanks的示例代码并使用了他们的模型。在我的游戏中,对等方之间没有客户端/服务器关系,因此我没有使用其中一个。两个对等方都维护一个游戏状态,根据接收到的数据进行更新。
我有一个NSTimer用于在每帧运行游戏循环。 NSTimers不同步,因此有时游戏状态会变得不同,例如:玩家几乎同时拾取能量增强物,由于发送数据需要一些时间,所以两个玩家都获得了该能量增强物。
我会感激任何使应用程序正常工作的想法。我正在考虑重写代码以使用客户端-服务器,但我不确定这是否是个好主意...但愿可以。
谢谢!
编辑:我更改了代码,随机选择一个玩家作为主机。 每当玩家放置炸弹时,他都会询问服务器在哪里放置它。服务器返回玩家位置(如在服务器上看到的)然后告诉玩家在哪里放置炸弹。
对于能量增强物,服务器检查玩家是否拾取了能量增强物,如果是,则发送通知包。
现在出现了另一个问题。设备之间的延迟很高(我正在使用蓝牙连接)。在客户端点击按钮放置炸弹后,需要大约0.2秒才能放置炸弹。
我正在可靠地发送所有数据。我这样做对吗?
我查看了GKTanks的示例代码并使用了他们的模型。在我的游戏中,对等方之间没有客户端/服务器关系,因此我没有使用其中一个。两个对等方都维护一个游戏状态,根据接收到的数据进行更新。
我有一个NSTimer用于在每帧运行游戏循环。 NSTimers不同步,因此有时游戏状态会变得不同,例如:玩家几乎同时拾取能量增强物,由于发送数据需要一些时间,所以两个玩家都获得了该能量增强物。
我会感激任何使应用程序正常工作的想法。我正在考虑重写代码以使用客户端-服务器,但我不确定这是否是个好主意...但愿可以。
谢谢!
编辑:我更改了代码,随机选择一个玩家作为主机。 每当玩家放置炸弹时,他都会询问服务器在哪里放置它。服务器返回玩家位置(如在服务器上看到的)然后告诉玩家在哪里放置炸弹。
对于能量增强物,服务器检查玩家是否拾取了能量增强物,如果是,则发送通知包。
现在出现了另一个问题。设备之间的延迟很高(我正在使用蓝牙连接)。在客户端点击按钮放置炸弹后,需要大约0.2秒才能放置炸弹。
我正在可靠地发送所有数据。我这样做对吗?