GKMatch expectedPlayerCount始终为1

时间:2015-02-15 07:16:21

标签: ios game-center

我正在制作一款2人iOS游戏。我使用GKMatchMaker来帮助我自动匹配玩家,以及我在创建请求时的表现:

GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = 2;
request.maxPlayers = 2;
request.defaultNumberOfPlayers = 2 ;
request.playerAttributes = 0 ; // NO SPECIAL ATTRIBS
request.playerGroup = 0 ;
[[GKMatchmaker sharedMatchmaker] findMatchForRequest:request withCompletionHandler:^(GKMatch *match, NSError *error) {
    if (!_matchStarted && match.expectedPlayerCount == 0){
            ...
        }

}];

我将min / max / default player all设置为2.但是,每次调用完成处理程序(这意味着创建匹配)时,expectedPlayerCount始终为1.

这也发生在我的inviteHandler中(在邀请请求中也将最小/最大玩家设置为2):

[GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite) {
    if (acceptedInvite){
        [[GKMatchmaker sharedMatchmaker] matchForInvite:acceptedInvite completionHandler:^(GKMatch *match, NSError *error) {
                if (!_matchStarted && match.expectedPlayerCount == 0){
                    ...
                }}}];}

expectedPlayerCount永远不会得到0.有谁知道这是怎么回事? (当我使用标准匹配视图控制器时它工作正常,所以我想我正确设置游戏套件,例如验证本地播放器......) 谢谢!

2 个答案:

答案 0 :(得分:2)

如果在GKMatch对象上进行打印,您将看到GKPlayer连接状态未知。您看到expectedPlayer计数为1,因为GKPlayer实际上没有连接到GKMatch对象。在completionHandler中设置匹配委托,如:match.delegate = self。然后声明/采用并实现GKMatchDelegate协议。具体来说就是didChangeConnectionState。设置代理后,您可以接收匹配连接状态的更改,并在玩家连接到匹配时收到通知。当玩家连接到匹配时,匹配的expectedPlayer计数将反映更改。希望这有助于某人。

答案 1 :(得分:0)

playerAttributes用于在比赛期间匹配球员。 GameCenter ORs不同玩家的playerAttributes值,如果任何一组玩家将OR改为0xFFFFFFFF,那么这些是添加到比赛中的玩家。

当然,playerGroup也是该过程的一部分,但在这种情况下不是,因为所有玩家都有一个0的玩家组(GameCenter以不同的方式计算玩家组。)

尝试为所有玩家设置playerAttribues为0xFFFFFFFF