如何从GKTurnBasedMatch中检索playerGroup属性?

时间:2012-04-25 14:53:44

标签: iphone ios xcode mobile gamekit

我的游戏中有三个不同的级别供用户选择。我已将玩家选择的等级保存在GKMatchRequest的playerGroup属性中。匹配完成后,如何从GKTurnBasedMatch中检索playerGroup,或者有不同的方法来跟踪匹配的游戏级别?

2 个答案:

答案 0 :(得分:1)

创建GKMatchRequest后,必须调用findMatchForRequest。在findMatchForRequest的完成处理程序中,您可以将游戏级别存储在新匹配的matchData属性中。

答案 1 :(得分:1)

我使用GKTurnBasedMatchmakerViewController来呈现自动匹配/邀请UI。在创建GKMatchRequest时,我将与ObjC相关的playerGroup值(打包到NSNumber中)添加到GKTBMVC,如下所示:

GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.playerGroup = somePlayerGroup;
GKTurnBasedMatchmakerViewController *mmvc = [[GKTurnBasedMatchmakerViewController alloc] initWithMatchRequest:request];
objc_setAssociatedObject(mmvc,
                         &kPlayerGroupKey,
                         [NSNumber numberWithInteger:request.playerGroup],
                         OBJC_ASSOCIATION_RETAIN);

[myViewController presentViewController:mmvc
                               animated:YES
                             completion:nil];

然后在turnBasedMatchmakerViewController:didFindMatch:委托方法中,我读取playerGroup值,以了解我们需要设置或加入的匹配类型:

- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)mmvc didFindMatch:(GKTurnBasedMatch *)match
{
     [myViewController dismissViewControllerAnimated:YES
                                          completion:^{
                                              NSNumber *n = objc_getAssociatedObject(mmvc, &kPlayerGroupKey);
                                              NSInteger playerGroup = [n integerValue];
                                              [self switchToMatch:match matchKind:playerGroup];
                                          }];
}

当然,您可以在创建新匹配时将playerGroup存储在match.matchData中,但有时使用匹配制作视图控制器传递它会更方便。