2014-04-09 1 views
1

첫 번째 앱을 시작할 준비를하고 있고 게임 내에 여러 개의 리더 보드를 갖고 싶습니다. 현재 샌드 박스 모드에서 점수를 추적하여 Game Center에 성공적으로 기록 할 수 있습니다. Game Center는 내 점수를 저장하고 (높은 점수 인 경우에만 해당) 완전히 기능을하는 것으로 보입니다.게임 센터 샌드 박스 모드로 여러 리더 보드 표시

저는 Itunes Connect를 통해 여러 리더 보드를 설정할 수 있다는 것을 알고 있으며, 매우 간단합니다. 그래도 내 게임을 게시하기 전에 여러 리더 보드를 테스트 할 수 있기를 원합니다. 샌드 박스 모드에서이 작업을 수행 할 수 있습니까? 현재 내 점수는 자동으로 기본 리더 보드에 로그인 한 것처럼 보입니다. 아래는 내가 점수를 저장/액세스하는 데 사용하는 관련 코드입니다. 감사!

ABGameKitHelper.m

#pragma mark - Leaderboard 
-(void) reportScore:(long long)aScore forLeaderboard:(NSString*)leaderboardId 
{ 
    GKScore *score = [[GKScore alloc] initWithCategory:leaderboardId]; 
    score.value = aScore; 

    [score reportScoreWithCompletionHandler:^(NSError *error) { 
     if (!error) 
     { 
      if(![self hasConnectivity]) 
      { 
       [self cacheScore:score]; 
      } 
      if (ABGAMEKITHELPER_LOGGING) NSLog(@"ABGameKitHelper: Reported score (%lli) to %@ successfully.", score.value, leaderboardId); 
     } 
     else 
     { 
      [self cacheScore:score]; 
      if (ABGAMEKITHELPER_LOGGING) NSLog(@"ABGameKitHelper: ERROR -> Reporting score (%lli) to %@ failed, caching...", score.value, leaderboardId); 
     } 
    }]; 
} 

-(void) showLeaderboard:(NSString*)leaderboardId 
{ 
    GKLeaderboardViewController *viewController = [GKLeaderboardViewController new]; 
    viewController.leaderboardDelegate = self; 
    if (leaderboardId) 
    { 
     viewController.category = leaderboardId; 
     CCLOG(@"Going to category already created"); 
    } 

    [[self topViewController] presentViewController:viewController animated:YES completion:nil]; 
} 

MainScene.m

- (void)gameCenter { 
    [[ABGameKitHelper sharedHelper] reportScore:1400 forLeaderboard:@"Score"]; 
    [[ABGameKitHelper sharedHelper] showLeaderboard:@"Score"]; 
} 

답변

3

제가 질문을 제대로 이해하고 있는지 확실하지 않습니다,하지만 난 대답을하려고합니다! 게임 센터는 여러 리더 지원합니다 : 당신이, 당신은 단지 기능 X가 보내려는 점수를 나타냅니다 [[ABGameKitHelper sharedHelper] reportScore:X forLeaderboard:LEADERBOARD_ID];, 호출 할 필요가 특정 리더 보드에 점수를 보낼 - 만약

을하고 LEADERBOARD_ID iTunes Connect에 지정된대로 점수를 보내려는 리더 보드의 ID입니다.

- 리더 보드가 여러 개인 경우 리더 보드 하나만 표시하고 목록은 모두 표시하지 않으려면 GKGameCenterViewController 클래스를 사용해야합니다. 그러나 조심하십시오. 이 ViewController는 iOS 6에만 추가되었으므로 장치가 실행중인 버전을 확인해야합니다. 저는 ABGameKitHelper도 사용하고 있습니다. 그래서이 종류의 뷰를 표시하는 함수를 만들었습니다. 여기 간다 :

ABGameKitHelper.m

- (void) showGameCenter{ 
    if (![[ABGameKitHelper sharedHelper] hasConnectivity]) return; 

    //Check if device runs on iOS 5 
    if([[[UIDevice currentDevice]systemVersion]intValue]==5) 
    { 
     //If so, we must use the GKLeaderboardViewController 
     GKLeaderboardViewController *leaderboard = [[GKLeaderboardViewController alloc] init]; 

     if (leaderboard != nil) 
     { 
      leaderboard.leaderboardDelegate = self; 
      [[self topViewController] presentViewController:leaderboard animated:YES completion:nil]; 
     } 

    }else if ([[[UIDevice currentDevice]systemVersion]intValue]>=6) 
    { 
     //if it runs on iOS 6 or higher, we use GKGameCenterViewController 
     GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 

     if (gameCenterController != nil) 
     { 
      gameCenterController.gameCenterDelegate = self; 
      gameCenterController.viewState = GKGameCenterViewControllerStateDefault; 

      [[self topViewController] presentViewController:gameCenterController animated:YES completion:nil]; 
     } 
    } 
} 

그리고 추가하는 것을 잊지 마세요 :

- (void) gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController{ 
    [gameCenterViewController dismissViewControllerAnimated:YES completion:nil]; 
} 

모든 포함하는 좋은보기를 표시 할 수 있도록이 기능을 사용하여 귀하의 리더 보드 및 성과.

희망이 도움이됩니다.

+0

감사합니다. 훌륭한 반응으로 모든 것이 작동했습니다! – spaderdabomb

+0

다행이었습니다! :) – RaphBlanchet