无法添加与iPhone [GKMatchmaker addPlayersToMatch]/IOS 5

问题描述:

我有一个游戏中心应用额外的球员。我成功地连接两个客户端,并可以发送邮件等等。现在我想添加第三/第四客户端[GKMatchmaker addPlayersToMatch]是这样的...无法添加与iPhone [GKMatchmaker addPlayersToMatch]/IOS 5

- (void) findAdditionalPlayer 
{ 
    GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease]; 
    request.minPlayers = 2; // minPlayers = 3 doesn't work either 
    request.maxPlayers = 4; 

    [[GKMatchmaker sharedMatchmaker] addPlayersToMatch:match matchRequest:request completionHandler:^(NSError *error) 
    { 
     if (error) 
     { 
      // Process the error. 
      NSLog(@"Could not find additional player - %@", [error localizedDescription]); 
     } 
     else 
     { 
      NSLog(@"Find additional player expecting = %d", match.expectedPlayerCount); 
     } 
    }]; 
} 

如果一个客户端(投票服务器)调用findAdditionalPlayer我从不连接(另一个客户使用GKMatchmakerViewController)。奇怪的是,如果两个连接的客户端都调用findAddtionalPlayer,那么我的完成块将执行(the match.expectedPlayerCount == 2),但我的第三个客户端永远不会连接。

应该只有一个游戏客户端在上面调用这个函数吗?文档没有真正指定。

没有人有使用addPlayersToMatch的作品的例子吗?

根据我的经验,对于一个2人游戏,addPlayersToMatch应由双方球员执行他们重新连接到游戏中(和通过游戏中心来回通信)。

这是有道理的,如果他们都调用findAdditionalPlayer因为两者都呼吁addPlayersToMatch你的两个客户端可以连接。

如果您已经有2名球员(比如A和B),并且想把第三个玩家游戏(比如C)的加入,你必须:

在玩家A(邀请C):

GKMatchRequest *request = [[GKMatchRequest alloc] init]; 
request.minPlayers = 3; 
request.maxPlayers = 4; 
request.playersToInvite = [NSArray arrayWithObject:playerC_id]; 
[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:myMatch matchRequest:request completionHandler:nil]; 

在玩家B(邀请C):

GKMatchRequest *request = [[GKMatchRequest alloc] init]; 
request.minPlayers = 3; 
request.maxPlayers = 4; 
request.playersToInvite = [NSArray arrayWithObject:playerC_id]; 
[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:myMatch matchRequest:request completionHandler:nil]; 

在玩家C(邀请A和B):

GKMatchRequest *request = [[GKMatchRequest alloc] init]; 
request.minPlayers = 3; 
request.maxPlayers = 4; 
request.playersToInvite = [NSArray arrayWithObjects:playerA_id, playerB_id, nil]; 
[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:myMatch matchRequest:request completionHandler:nil]; 

所以重新加入或添加新的玩家的匹配机制似乎是:

  1. 当玩家检测到远程播放器已经断开(或一种完全新的玩家被添加),创建新的匹配请求对象,在这个新的匹配请求的playersToInvite数组中只包含已断开连接的/新玩家的ID,并用它执行addPlayersToMatch。
  2. 当断开球员恢复,创建一个新的匹配请求对象,包括所有的远程球员的IDS(您可能需要将它们存储在阵列中,或者让他们从你GKMatch的playerIDs属性)在其比赛要求的playersToInvite阵列并用它执行addPlayersToMatch。

换句话说,每个现有玩家都很多地将新玩家添加到他们的比赛对象中,并且新玩家将所有现有玩家添加到其匹配对象中。玩家A,B和C各自执行他们的addPlayersToMatch调用,其中playerToInvite只包含D的匹配请求对象playerID。玩家D使用其playerToInvite数组包含A,B以及C的playerID的匹配请求对象执行其addPlayersToMatch调用。

+0

我有哪里4players被playing.if 1player断开连接的问题,那么其他3也得到disconnected.y它happen.How超过来这种情况。 – 2012-10-03 11:49:23