我使用GameCenter和實時服務器 - 客戶端網絡策略創建了一款紙牌遊戲。在沙箱中測試時,遊戲完美無瑕(使連接,選擇最佳主機,發送/接收數據),有時遊戲甚至可以完成而沒有問題。然而,大部分時間,在兩臺設備上我都會收到一個匹配:player:didChangeState:回叫,通知我反對用戶已斷開連接。它經常發生令人沮喪的事情,似乎沒有任何與閒置或超時有關的事情。我的想法是我可能會在GameCenter服務器上處理正常的網絡延遲,因爲在極少數情況下玩家似乎重新連接並再次發送數據。其他人使用GKMatch和Real Time GameCenter處理這些問題嗎?我正在測試運行iOS 6.1並連接到同一個WiFi網絡的iPhone 5和iPhone 4上的應用程序。實時GKMatch斷開連接問題
1
A
回答
0
儘管我沒有找到確切的解決方案,但我用以下方法修補了我的問題。此外,爲了防止在斷開連接期間丟失發送的消息:我實現了一個「響應」處理程序,該處理程序檢測消息是否實際上被對手接收(因爲當消息未被對手接收時,可靠數據發送模式不會出錯由於連接問題)。
當遊戲開始時,我確定用戶是主機(chooseBestHostPlayerWithCompletionHandler:^),當我檢測到斷開時,主玩家重新邀請非服務器玩家重新回到遊戲中。無論遊戲是通過邀請還是「立即遊戲」開始,這都是有效的。它解決了我的問題,「ShouldReconnect」只適用於1v1和邀請賽。當非主人玩家接受邀請時,我以編程方式完成比賽,以防止MatchMakerViewController不得不出現在屏幕上。一旦重新連接,比賽恢復沒有問題。
- (void)reinvitePlayer {
GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = 2;
request.maxPlayers = 2;
request.playersToInvite = @[_opponent.playerID];
request.inviteMessage = @"Reconnect?";
request.inviteeResponseHandler = ^(NSString *playerID, GKInviteeResponse response)
{
DLog(@"Player response = %i.",response);
// [self updateUIForPlayer: playerID accepted: (response == GKInviteeResponseAccepted)];
};
[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:_match matchRequest:request completionHandler:^(NSError *error) {
if (error != nil) {
DLog(@"Unable to add player to match.");
} else {
DLog(@"Successfully reconnected");
[[GKMatchmaker sharedMatchmaker] finishMatchmakingForMatch:_match];
}
}];
}
1
我對MAX player = 2有同樣的問題。 對我來說GKMatch的委託
- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state;
收益「狀態」爲「GKPlayerStateDisconnected」甚至用戶在遊戲中活躍。 解決方案對我來說如下: 在我的NetworkManager類中,我已經將當前匹配引用爲gkMatch。因此,無論何時我再次將'狀態'設置爲'GKPlayerStateDisconnected',我都會檢查是否真的與遠程播放器斷開連接。爲此,我使用'gkMatch'數據如下: ps:如果會話實際上沒有斷開連接,則它包含字符串'連接'。
NSString *gkMatchString = [NSString stringWithFormat:@"%@",[NetworkManager sharedManager].gkMatch];
if ([gkMatchString rangeOfString:@"connected"].location == NSNotFound)
{
NSLog(@"Session is actually closed.");
}else{
NSLog(@"Session is NOT yet closed.");
}
它適用於我,所以讓我知道它是否有助於任何人。
相關問題
- 1. 玩家斷開問題GKMatch和Gamekit
- 2. 如何判斷我們何時與GameCenter GKMatch會話斷開連接?
- 3. Spring Security - Tomcat:斷開連接問題
- 4. Delphi Indy 10斷開連接問題
- 5. Mongoose斷開/重新連接問題
- 6. 從駱駝websocket連接/斷開ActiveMQ主題連接/斷開
- 7. 斷開連接時銷燬socket.io連接
- 8. SSIS - 連接斷開時
- 9. C#:套接字問題 - 幾秒鐘後連接的套接字斷開連接
- 10. 遠程處理和套接字有此斷開連接/重新連接問題
- 11. 警告:遠程連接斷開連接,連接到169.254.169.254超時
- 12. 從網絡斷開連接時保持Oracle連接打開
- 13. 斷開而不斷開連接?
- 14. Flash Builder更新查詢問題 - 通道斷開連接在收到確認之前,通道斷開連接
- 15. socket.io斷開連接事件,客戶端斷開連接檢測
- 16. php mysql斷開連接是否真的斷開連接?
- 17. Android BLE GATT斷開連接與設備斷開連接
- 18. TCP連接斷開檢測(如果中間連接斷開)?
- 19. Citrix遠程斷開連接/遠程斷開連接源
- 20. boost :: asio tcp服務器斷開連接問題
- 21. android模擬器與eclipse斷開連接問題
- 22. 與Wifi斷開連接的Java web socket問題
- 23. 經典ASP斷開連接的記錄集問題
- 24. Socket.IO:XHR-斷開連接時輪詢延遲
- 25. 彈出關閉時Socket.IO連接斷開
- 26. 推送器斷開連接和超時
- 27. 安卓調試時USB連接斷開
- 28. 斷開的連接不超時
- 29. TCPClient斷開連接時顯示消息
- 30. 斷開Asterisk Manager的連接時出錯
它有幫助。我認爲這是最好的,但當你做交換機(會話)使'case:GKPlayerStateDisconnected'最後一個 – kezi