Multipeer连接和数据沿途发送

时间:2015-08-09 20:40:50

标签: ios xcode multiplayer multipeer-connectivity

我正在开发一款平台游戏,试图利用IOS Multipeer连接为多人游戏制作它。我陷入困境/困惑/不知道在同伴之间发送消息的最佳方式是什么(大多数是游戏中的4个同伴)。游戏风格就像有趣的跑步,我有4个英雄跑步和互相射击等等。问题在于保持其他球员的位置让我疯狂! 有时其他玩家处于错误的位置(请记住所有设备都具有相同的屏幕尺寸)。这是因为连接滞后。我每秒可以发送多少信息以及管理数据传输的最佳方式是什么?

感谢任何想法/想法。

2 个答案:

答案 0 :(得分:4)

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

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

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

第三件事是sendData:(NSData *)data toPeers:(NSArray *)peerIDs withMode:(MCSessionSendDataMode)mode error:(NSError **)error。如果要将数据包广播到toPeers中的所有对等方:数组AND模式为MCSessionSendDataReliable,则MPC会等待所有连接的对等方确认消息,然后再转到下一个数据包。

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

更新2:更多地考虑您的问题,MPC通讯需要记住几件事:

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

  • 保持您的数据包较小,但设计它们以便收到的更新代表您的播放器的当前状态。这允许你错过更新而不是完全不同步 - "发送播放器1移动到(10,10)"而不是"玩家1移动了(1,-1)"

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

答案 1 :(得分:2)

如果您遵循Dan Loughney的建议,我认为您在调试中最好的选择是记录其他玩家的接收坐标。这应该可以帮助您确定问题是由于时间问题,错误解释的数据还是其他原因。