我正在开发一款平台游戏,试图利用
IOS Multipeer连接为多人游戏制作它.我陷入困境/困惑/不知道在同伴之间发送消息的最佳方式是什么(大多数是游戏中的4个同伴).游戏风格就像有趣的跑步,我有4个英雄跑步和互相射击和类似的东西.问题在于保持其他球员的位置让我疯狂!
有时其他玩家处于错误的位置(请记住所有设备都具有相同的屏幕尺寸).这是因为连接滞后.我每秒可以发送多少信息以及管理数据传输的最佳方式是什么?
有时其他玩家处于错误的位置(请记住所有设备都具有相同的屏幕尺寸).这是因为连接滞后.我每秒可以发送多少信息以及管理数据传输的最佳方式是什么?
任何想法/想法都表示赞赏.
解决方法
MPC的吞吐量主要取决于连接.我所看到的最大的性能问题是其中一个同伴禁用了WiFi.这迫使MPC通过蓝牙进行通信,这非常慢.我已经看到它比Wifi慢了20倍.
您无需连接到WiFi网络.只需在所有设备上启用WiFi,iOS将利用共享WiFi网络或创建自己的adhoc网络.
您要确保的第二件事是您的同伴不会互相邀请.您的网络中只能有一个邀请者.当多个对等方邀请并接受连接时,MPC网络变得不稳定.
第三件事是sendData:(NSData *)数据toPeers:(NSArray *)peerIDs withMode:(MCSessionSendDataMode)模式错误:(NSError **)错误.如果要将数据包广播到toPeers中的所有对等方:数组AND模式为MCSessionSendDataReliable,则MPC会等待所有连接的对等方确认消息,然后再转到下一个数据包.
更新:我使用自己的应用程序和WiFi进行了一些测试,我可以使用两个设备进行大约100kbps的测试.我正在使用iPhone 6 Plus和iPhone 5S.
更新2:更多地考虑您的问题,MPC通信需要记住几件事:
>在后台线程上执行所有sendData和didReceiveData调用,并让该线程更新模型中的位置数据.告诉您的viewController,通过委托方法或通知可以获得更新.>保持您的数据包较小,但设计它们,以便收到的更新代表您的播放器的当前状态.这允许你错过更新而不是完全不同步 – “发送播放器1移动到(10,10)”而不是“播放器1移动(1,-1)”>为您的数据包编号并使用MCSessionSendDataUnreliable.如果您收到的数据包的编号早于您处理的最后一个数据包,请将其丢弃.如果您遵循上面的第二条准则,则不需要此数据包.