2014-04-14 117 views
0

Game Center基於回合的比賽制作界面允許用戶創建與多名玩家的比賽,並向邀請朋友填充其中一些地點並留下其他人用於自動匹配。創建GKTurnBasedMatch,包含受邀玩家和自動匹配玩家

我正在創建自己的遊戲中的比賽創作界面,迄今爲止工作正常,除了與受邀和自動比賽的球員創建比賽。

GKMatchmaker有addPlayersToMatch方法,我相信你可以在匹配存在的時候添加自動匹配的玩家,但是GKTurnBasedMatch沒有等價的方法。

以下是我正在使用的代碼,它工作得很好。如果有人知道如何添加一些自動匹配的球員,將非常感謝!

- (GKMatchRequest *) buildMatchRequestWithFriends: (NSArray *) friendsList NumberOfPlayers: (NSInteger) numberOfPlayers 
{ 
    NSLog(@"TurnByTurnHelper.buildMatchRequestWithFriends"); 
    GKMatchRequest *request = [[GKMatchRequest alloc] init]; 
    NSArray *playersToInvite = [NSArray arrayWithArray:friendsList]; 
    request.playersToInvite = playersToInvite; 
    request.defaultNumberOfPlayers = numberOfPlayers + 1; 
    return request; 
} 

- (void) requestMatchWithFriends:(NSArray *) friendsList NumberOfPlayers: (NSInteger) numberOfPlayers{ 

    if (!_delegate) 
    { 
     NSLog(@"Error: Expected but did not find delegate"); 
     return; 
    } 

    GKMatchRequest *request = [self buildMatchRequestWithFriends:friendsList NumberOfPlayers: numberOfPlayers]; 

    [GKTurnBasedMatch findMatchForRequest: request withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error) 
    { 
     if (match){ 
      NSLog(@"findMatchForRequest: Success!"); 

      // Add match to matches 

     } else { 
      NSLog(@"error: %@", error); 

     } 
    }]; 
} 

回答

0

好了,帶着幾分圍繞搜索和測試我發現蘋果的 開發者文檔不完整和/或誤導性的。以下語句在GKMatchRequest的playersToInvite屬性部分中進行:

「如果屬性的值非零,當您使用請求創建匹配時,Game Center會邀請這些玩家進行匹配。完成並且GKMatchRequest maxPlayers和minPlayers屬性被忽略。「

對於GKMatchmaker而言,這是正確的,但不適用於GKTurnBasedMatch!對於GKTurnBasedMatch,如果您在playersToInvite屬性中提供了playerIds數組,則不會忽略maxPlayers和minPlayers屬性,Game Center將使用隨機播放器填充額外空間。

下面的代碼做的伎倆:

- (GKMatchRequest *) buildMatchRequestWithFriends: (NSArray *) friendsList NumberOfPlayers: (NSInteger) numberOfPlayers 
{ 
    GKMatchRequest *request = [[GKMatchRequest alloc] init]; 
    NSArray *playersToInvite = [NSArray arrayWithArray:friendsList]; 

    if([friendsList count]<=0){ 
     request.minPlayers = 2; 
     request.maxPlayers = numberOfPlayers; 
     request.playersToInvite = nil; 
    } else { 
     request.minPlayers = 2; 
     request.maxPlayers = numberOfPlayers; 
     request.playersToInvite = playersToInvite; 
    } 

    return request; 
} 

這故事的寓意是:有時,最好不要RTFM!