Game Center Sandbox模式显示多个排行榜

时间:2014-04-09 21:39:07

标签: ios cocos2d-iphone 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"];
}

1 个答案:

答案 0 :(得分:3)

我不确定我是否理解你的问题,但我会尽力回答! Game Center支持多个排行榜:

- 如果您想将分数发送到特定的排行榜,您只需调用[[ABGameKitHelper sharedHelper] reportScore:X forLeaderboard:LEADERBOARD_ID];函数,其中 X 表示您要发送的分数, LEADERBOARD_ID 是您要将分数发送到的排行榜的ID,如iTunes Connect中所指定。

- 当您有多个排行榜时,如果您不想仅显示一个排行榜,而是只显示所有排行榜的列表,则应使用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];
}

使用此功能可以显示包含所有排行榜和成就的精彩视图。

希望这有帮助!