プレイヤーの選択によって、プラスのハイスコアまたはマイナスのロースコアを達成できるゲームを作成しています。私が使用してきたコードは、リーダーボードが 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 を認証するために何をする必要があるのか よくわかりません。