2013-06-18 78 views
0

我正在使用Game Center的iOS多人遊戲。遊戲中心發送數據問題

當用戶在Game Center中登錄並點擊「立即播放」GC連接4個玩家並開始遊戲。問題在於遊戲經常被凍結,因爲有些數據丟失了(我認爲這是原因)。遊戲通常工作正常,但有時由服務器發送的數據(服務器是某些玩家)會丟失並凍結遊戲。

我用這個功能來發送數據:

- (void)sendDataNSData *)data { 
    NSError *error; 

    BOOL success = [[GCHelper sharedInstance].match sendDataToAllPlayers:data withDataMode:GKMatchSendDataReliable errorerror]; 

    if (!success) { 

     //NSLog(@"Error sending init packet"); 
     [self matchEnded]; 

    } 
} 

的問題是,matchend不叫,所以我認爲,數據發送,但它會丟失。

有沒有人有類似的問題,並知道如何解決它?

+0

什麼是錯誤參數? – Mert

+0

@Mert - 沒有錯誤。有時候客戶端不會收到警告的數據包。 – CroiOS

+0

你使用模擬器還是idevice?遊戲中心api在模擬器上無法正常工作。 – Mert

回答

2

我的用戶也抱怨說有些數據可能會在遊戲過程中意外丟失。我寫了一個test app,發現GKMatchSendDataReliable不是很可靠。在弱互聯網連接(例如EDGE)上,一些數據包經常丟失,而Game Center API沒有任何錯誤。

所以唯一的選擇是增加一個額外的傳輸層,真正可靠的交付。

我爲此寫了一個簡單的庫:RoUTP。它保存所有發送的消息,直到確認每個收到的消息,重新發送丟失並緩衝接收到的消息,以防發生序列中斷。 在我的測試組合「RoUTP + GKMatchSendDataUnreliable」甚至比「RoUTP + GKMatchSendDataReliable」更有效(當然比單純的GKMatchSendDataReliable更不可靠)。