1

プレイヤーの選択によって、プラスのハイスコアまたはマイナスのロースコアを達成できるゲームを作成しています。私が使用してきたコードは、リーダーボードが 1 つしかない場合はうまく機能しますが、2 つ目を追加しようとすると問題が発生します。TEHS は HighScore のリーダーボード ID で、TELS は LowScore のリーダーボード ID です。

ローカル プレーヤーを認証します。

-(void)authenticateLocalPlayer{
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];

localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
    if (viewController != nil) {
        [self presentViewController:viewController animated:YES completion:nil];
    }
    else{
        if ([GKLocalPlayer localPlayer].authenticated) {
            _gameCenterEnabled = YES;

            // Get the default leaderboard identifier.
            [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) {

                if (error != nil) {
                    NSLog(@"%@", [error localizedDescription]);
                }
                else{
                    TEHS = leaderboardidentifier;
                }
            }];
        }

        else{
            _gameCenterEnabled = NO;
        }
    }
};
}

スコアは次のように報告されます。

-(void)reportHighScore{

GKScore *highscore = [[GKScore alloc] initWithLeaderboardIdentifier:TEHS];
highscore.value = HighScoreNumber;

[GKScore reportScores:@[highscore] withCompletionHandler:^(NSError *error) {
    if (error != nil) {
        NSLog(@"%@", [error localizedDescription]);
    }
}];
}

-(void)reportLowScore {

GKScore *lowscore = [[GKScore alloc] initWithLeaderboardIdentifier:TELS];
lowscore.value = LowScoreNumber;

[GKScore reportScores:@[lowscore] withCompletionHandler:^(NSError *error) {
    if (error != nil) {
        NSLog(@"%@", [error localizedDescription]);
    }
}];
}

また、プレイヤーがアクティブ化するとリーダーボードが表示されます。

-(void)showLeaderboardAndAchievements:(BOOL)shouldShowLeaderboard{
GKGameCenterViewController *gcViewController = [[GKGameCenterViewController alloc] init];

gcViewController.gameCenterDelegate = self;

if (shouldShowLeaderboard) {
    gcViewController.viewState = GKGameCenterViewControllerStateLeaderboards;
    gcViewController.leaderboardIdentifier = TEHS;
}
else{
    gcViewController.viewState = GKGameCenterViewControllerStateAchievements;
}

[self presentViewController:gcViewController animated:YES completion:nil];
}

変更すると、reportLowScore または reportHighScore のいずれかが機能します

gcViewController.leaderboardIdentifier = TEHS;

TEHS = リーダーボード識別子;

それぞれの識別子と一致します。というわけで、今のところこのコードはHigh Score(TEHS)で動きますが、上の2つをTELSに変えればLow Scoreが動きます。両方のリーダーボードを機能させるために LocalPlayer と showLeaderboardAndAchievements を認証するために何をする必要があるのか​​ よくわかりません。

4

1 に答える 1