2013-09-26 103 views
1

我工作的多人遊戲和我的比賽已成功啓動。我的情況是我有三名球員。玩家1,玩家2,玩家3。 從Player3,我叫GKMatch對象的斷開方法和我的disconnect方法是GKMatch委託函數調用didStateChange兩次或延遲呼叫

-(void)disocnnectOnlineMatch { 
    [self.currOnlineMatch disconnect]; 
    self.currOnlineMatch.delegate = nil; 
    self.currOnlineMatch = nil; 
} 

在PLAYER1和Player2設備本didChangeState函數被調用首次超過有時它再次爲Player3再次調用後。預計僅但其呼籲的2倍爲雙方球員

- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state { 

} 

任何事情我做的撥錯被調用一次? 斷開匹配的最佳做法是什麼?

還有些時候,這是發生在didChangeState方法被調用,但有一定的延時後。儘管在遊戲中需要斷開連線玩家的一些更新。

什麼可以響應延遲的原因是什麼?

- (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match { 
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 
    currOnlineMatch = match; 
    currOnlineMatch.delegate = self; 
    [PuzzleLogicManager sharedManager].onlineNextRound = 2; 
    [self setupRandomNumberToSend:2.0f]; 
    [presentingViewController dismissViewControllerAnimated:YES completion:^() { 
     //NSLog(@"dismissed"); 
    }]; 
} 

請幫忙提前

回答

0

感謝我認爲這是在iOS 6中推出,因爲我們已經看到了它,以及一個錯誤。我們不僅會得到重複的斷開回調,而且有時候我們會收到實際仍在遊戲中並且移動得很好的玩家的斷開回叫。

我所做的來解決這個問題是驗證GKPlayer真的是斷開的,當我得到斷開回調。我所做的只是檢查遊戲過程中GKMatch的全局副本,看看GKPlayer是否還在那裏。如果是這樣,那麼該玩家實際上並沒有斷開連接,這樣我就可以忽略此消息:

NSString *id; 
for (id in gCurrentMatch.playerIDs) 
{ 
    if ([id isEqualToString:playerID]) 
    { 
    NSLog(@"player is NOT really disconnected!!!"); 
    return;  // just bail and ignore this 
    } 
}