2012-04-25 112 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,但有時它更方便與婚介視圖控制器通過。