2012-04-25 70 views
2

我的游戏中有三种不同的级别,用户可以选择。我在GKMatchRequest的playerGroup属性中保存了玩家所选的等级。在比赛结束后,如何从GKTurnBasedMatch中检索playerGroup,或者有不同的方式来跟踪哪个比赛级别匹配?如何从GKTurnBasedMatch中检索playerGroup属性?

回答

1

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

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

当然,你创建一个新的比赛时,可以存储在playerGroupmatch.matchData,但有时它更方便与婚介视图控制器通过。