2016-08-04 73 views
0

我有一个游戏,使用Multipeer senddata每隔0.05秒发送一个玩家position.x,position.y和角度在一个可变阵列中。IOS/MultipeerConnectivity/SendData和ReceiveData之间的延迟

NSMutableArray *Messagee = [[NSMutableArray alloc] initWithCapacity:10]; 
[Messagee addObject:x]; 
[Messagee addObject:y]; 
[Messagee addObject:ang]; 


NSData* Message = [NSKeyedArchiver archivedDataWithRootObject:Messagee]; 
dispatch_async(dispatch_get_main_queue(), ^(void) { 
[self.partyTime sendData:Message 
       withMode:MCSessionSendDataUnreliable 
        error:nil];  
}); 

其他球员得到使用

- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID; 

我面对的是,didrecievedata被调用非常unregulary,因为它应该每0.05秒调用的问题数据(i发送数据每0.05秒为单位) 。

我在两次didrecieve数据之间经历了延迟上升到0.20秒的巨大差异,接下来的数据包为0.00001秒。

我需要一个0.05秒的恒定didrecievedata等于来自另一个玩家的senddata来同步玩家位置。

有什么办法让senddata和recievedata之间有一个很小的延迟?例如平等吗?

是我的数据,我发送(NSMutableArray的)到大 - >延迟

我应该使用流?

非常感谢!

回答

0

通过开放网络发送的任何内容都会经历不规则的延迟,具体取决于网络的繁忙程度以及存在多少干扰。这是你需要处理的事情。

有正常,你可以用它来对付的是,挑选一个是最适合你的应用程序两种方法:

  1. 将时间戳的消息,并让接收方直接处理它们,但是使用时间戳来知道每条消息何时应该被使用,并调整你的逻辑。
  2. 在接收端引入固定延迟,大致等于最长的预期延迟。然后将收到的消息排队,然后以正常速率将它们转发给应用程序的其余部分。

在这两种情况下,您都需要为丢弃的消息做好准备。