【问题标题】:Game Kit Peer to Peer游戏套件点对点
【发布时间】:2011-11-15 20:13:26
【问题描述】:

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

我查看了 GKTanks 的示例代码并使用了他们的模型。对等方之间没有客户端/服务器关系,所以我没有在我的游戏中使用。两个对等点都维护一个游戏状态,它们根据接收到的数据进行更新。

我有一个用于在每一帧运行游戏循环的 NSTimer。 NSTimers 不同步,所以有时游戏状态会变得不同,例如:玩家几乎在同一时间拿起通电,他们都得到了通电,因为发送数据需要一段时间。

如果有任何关于使该应用正常运行的想法,我将不胜感激。我正在考虑重写代码以使用客户端-服务器,但我不确定这是否是个好主意......但是

谢谢!

编辑:我更改了代码,以便随机选择一个玩家作为主持人。 每次玩家放置炸弹时,他都会询问服务器将其放置在哪里。服务器返回玩家位置(如服务器上所见),然后告诉玩家放置炸弹的位置。

对于通电,服务器会检查玩家是否获得了通电,如果他收到了,则会发送一个数据包通知他。

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

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

【问题讨论】:

    标签: iphone ios networking gamekit


    【解决方案1】:

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

    两个玩家都急于上电。 主持人先拿起它。
    它被注册并且主机收到电源。
    与此同时,玩家#2 也拿起了道具,将动作发送给主机。
    主机通知玩家#2,加电已经消失。

    与您的情况有关,您一定会因丢包而失去同步。
    由于无法发生主机-客户端关系,唯一的问题是主机始终具有优势,当设备之间的延迟增加时,尤其是智能手机上的延迟会变得更大。

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

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

    【讨论】:

      【解决方案2】:

      你应该做什么:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-30
        • 2012-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-26
        • 1970-01-01
        相关资源
        最近更新 更多