iOS Game Kit基于匹配的程序化重新匹配

时间:2012-08-27 19:36:09

标签: ios game-center

我有一款使用游戏中心和GKTurnbasedMatch的2人iOS转弯游戏。

有没有办法在比赛结束后以编程方式重新匹配对手?

我想让玩家一键式访问彼此开始新的比赛。

如果没有一键式方法,有哪些潜在的替代方案?

2 个答案:

答案 0 :(得分:4)

确实,游戏中心似乎忽略了完整的程序化解决方案。毫无疑问是一种痛苦。在@selector(doRematchTap)中尝试以下内容......或某些等效内容:

    NSMutableArray *playerIds = [NSMutableArray array];
    GKTurnBasedParticipant *otherPlayer = /* Get the other player some way */;
    GKTurnBasedParticipant *myParticipant = /* Get yourself a very similar way*/;

    [playerIds addObject:myParticipant.playerID];
    if (otherPlayer.playerID) {
        [playerIds addObject:otherPlayer.playerID];
    }// sanity check

    GKMatchRequest *request = [[GKMatchRequest alloc] init];
    request.playersToInvite = playerIds;
    request.minPlayers = 2;
    request.maxPlayers = 2;

    GKTurnBasedMatchmakerViewController *tbmcv = [[GKTurnBasedMatchmakerViewController alloc] initWithMatchRequest:request];
    tbmcv.showExistingMatches = NO;
    tbmcv.turnBasedMatchmakerDelegate = /* Your normal delegate for the callbacks */;

    [self presentViewController:tbmcv
                       animated:YES
                     completion:^{
                      }];

重要的是要注意showExistingMatches = NO,它会将视图控制器直接跳转到匹配模式,并且预先选择了正确的用户(似乎),而不是显示用户现有的匹配。

答案 1 :(得分:1)

我没有完整的解决方案,但是有一个想法:

每个玩家都有一个独特的玩家ID,如果你在

后存储它,你可以得到它

didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID

现在,您可以通过编程方式启动新匹配并邀请此播放器。他会被问到他是否想要复赛,然后你可以再次参赛。

我知道这不是代码或具体的建议,但也许是足够的信息来找到GameKit Class Reference中的其余内容。

我想知道你是否可以解决这个问题,告诉我你是否做到了,祝你好运!

修改

我在references搜索过,发现了这个:

- (void) loadPlayerData: (NSArray *) identifiers

我自己没有尝试过,但如果你将标识符存储在数组中并将其传递给此函数,你应该再次以这种方式获得播放器。

我希望他们在iOS6中为Game Center带来一些变化,你可以用自己的方式以编程方式进行比赛......