2016-08-04 69 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. 在接收端引入固定延遲,大致等於最長的預期延遲。然後將收到的消息排隊,然後以正常速率將它們轉發給應用程序的其餘部分。

在這兩種情況下,您都需要爲丟棄的消息做好準備。