2

我的游戏中有三个不同的级别可供用户选择。我已将玩家选择的关卡保存在 GKMatchRequest 的 playerGroup 属性中。进行比赛后,如何从 GKTurnBasedMatch 中检索 playerGroup,或者是否有不同的方法来跟踪比赛是哪个游戏级别?

4

2 回答 2

1

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

于 2012-09-24T08:21:52.340 回答
1

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

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];
                                          }];
}

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

于 2013-07-22T13:08:29.933 回答