我想知道如何在遊戲進程正在進行時爲本地玩家獲取斷開連接信息,並且我們無法將我們的數據傳達給其他玩家。由於文檔中沒有任何內容表明「這種方法會在您的連接失敗時通知您」,所以我有點不知所措。如何判斷我們何時與GameCenter GKMatch會話斷開連接?
我試圖使用這段代碼,希望它可以工作,但它是徒勞的。 「我們斷開連接」。消息從不被觸發。
- (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state {
if (self.match != theMatch) return;
switch (state) {
case GKPlayerStateDisconnected:
//disconnected
NSLog(@"player status changed: disconnected");
matchStarted = NO;
GKLocalPlayer *player = [GKLocalPlayer localPlayer];
if ([playerID isEqualToString:player.playerID]) {
// We have been disconnected
NSLog(@"We're disconnected.");
}
if ([delegate respondsToSelector:@selector(matchEnded)]) {
[delegate matchEnded];
}
break;
}
}
,我發現可能會告訴我們,我們是無法溝通的唯一其他行是當我們真正發送的數據是這樣的:
- (void)sendRandomMatchData:(NSData *)data {
GKMatch *match = [GCHelper sharedInstance].match;
BOOL success = [match sendDataToAllPlayers:data
withDataMode:GKMatchSendDataReliable
error:nil];
if (!success) {
[self matchEnded];
}
}
但我認爲「成功」也將如果對手斷開連接並且我們無法向他們發送消息,則爲false。
我有一個非常嚴格的遊戲邏輯,如果有人已經斷開連接,我需要通知他們,他們無法繼續玩比賽,他們已經輸了。
任何幫助,高度讚賞。
我已經注意到了這一點。如果玩家主動結束比賽,GKPlayerStateDisconnected被擊中,但是在網絡錯誤時,它從不被觸發,並且可以在無效狀態下獲得主動比賽。 – 2013-05-30 23:03:09