无法添加与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];
所以重新加入或添加新的玩家的匹配机制似乎是:
- 当玩家检测到远程播放器已经断开(或一种完全新的玩家被添加),创建新的匹配请求对象,在这个新的匹配请求的playersToInvite数组中只包含已断开连接的/新玩家的ID,并用它执行addPlayersToMatch。
- 当断开球员恢复,创建一个新的匹配请求对象,包括所有的远程球员的IDS(您可能需要将它们存储在阵列中,或者让他们从你GKMatch的playerIDs属性)在其比赛要求的playersToInvite阵列并用它执行addPlayersToMatch。
换句话说,每个现有玩家都很多地将新玩家添加到他们的比赛对象中,并且新玩家将所有现有玩家添加到其匹配对象中。玩家A,B和C各自执行他们的addPlayersToMatch调用,其中playerToInvite只包含D的匹配请求对象playerID。玩家D使用其playerToInvite数组包含A,B以及C的playerID的匹配请求对象执行其addPlayersToMatch调用。
我有哪里4players被playing.if 1player断开连接的问题,那么其他3也得到disconnected.y它happen.How超过来这种情况。 – 2012-10-03 11:49:23