沿途发送的多点连接和数据

Multipeer Connectivity and data to send along the way

我正在开发一款平台游戏,尝试使用 IOS Multipeer 连接使其也适用于多人游戏。我 stuck/confused/do 不知道在同龄人之间发送消息的最佳方式是什么(主要是游戏中的 4 个同龄人)。游戏风格很有趣 运行 我有 4 个英雄 运行 互相射击之类的。问题是保持其他玩家的位置让我发疯!! 有时其他玩家的位置是错误的(请记住所有设备的屏幕尺寸都相同)。那是因为连接滞后吗?我每秒可以发送多少信息以及管理数据传输的最佳方式是什么?

感谢任何idea/thoughts。

MPC 的吞吐量主要取决于连接。我认为最大的性能问题是其中一个对等方禁用了 WiFi。这迫使 MPC 通过蓝牙进行通信,这非常慢。我发现它 运行 比通过 Wifi 的 MPC 慢 20 倍。

您不需要连接到 WiFi 网络。只需在所有设备上启用 WiFi,iOS 将利用共享 WiFi 网络或创建自己的临时网络。

您要确保的第二件事是您的同行不会互相邀请。您的网络中只能有一个邀请者。当多个节点邀请和接受连接时,MPC 网络变得不稳定。

第三件事是sendData:(NSData *)data toPeers:(NSArray *)peerIDs withMode:(MCSessionSendDataMode)mode error:(NSError **)error。如果您正在向 toPeers: 数组中的所有对等点广播您的数据包,并且模式是 MCSessionSendDataReliable,那么 MPC 会等待所有连接的对等点确认消息,然后再继续下一个数据包。

更新:我用我自己的应用程序通过 WiFi 和两个我可以放置大约 100kbps 的设备进行了一些测试。我正在使用 iPhone 6 Plus 和 iPhone 5S。

更新 2:进一步思考您的问题,MPC 通信有几点需要牢记:

  • 在后台线程上执行所有 sendData 和 didReceiveData 调用,并让该线程更新您在模型中的位置数据。通过委托方法或通知告诉您的 viewController 更新可用。

  • 保持您的数据包较小,但设计它们以便收到的更新代表播放器的当前状态。这允许您错过更新并且不会完全不同步 - "send player 1 moved to (10, 10)" 而不是 "player 1 moved by (1, -1)"

  • 为您的数据包编号并使用 MCSessionSendDataUnreliable。如果您收到的数据包的编号早于您处理的最后一个数据包,请将其丢弃。如果您遵循上面的第二条准则,则不需要此数据包。

如果您听从 Dan Loughney 的建议,我认为调试时最好的办法是记录从其他玩家那里收到的坐标。这应该可以帮助您确定问题是由于时间问题、错误解释的数据还是其他原因造成的。