【问题标题】:How to get high score to submit/reportt to Game Center Leaderboard?如何获得高分提交/报告到游戏中心排行榜?
【发布时间】:2026-01-07 12:40:01
【问题描述】:

我已经在互联网上搜索了这个问题的答案。我在 iTunes Connect 中设置了排行榜,它显示在我的游戏中,但从未向排行榜报告高分。

这是我在 GameViewController.m 中的排行榜代码

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

localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error) {
    if (viewController != nil) [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:viewController animated:YES completion:nil];
    else {
        if ([GKLocalPlayer localPlayer].authenticated) {
            gameCenterEnabled = YES;

            [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) {
                if (error != nil) NSLog(@"%@", [error localizedDescription]);
                else _leaderboardIdentifier = leaderboardIdentifier;
            }];
        }
        else gameCenterEnabled = NO;
    }
};
  }

    - (void)showLeaderboard {
GKGameCenterViewController *gcViewController = [[GKGameCenterViewController alloc] init];
gcViewController.gameCenterDelegate = self;
gcViewController.viewState = GKGameCenterViewControllerStateLeaderboards;
gcViewController.leaderboardIdentifier = _leaderboardIdentifier;
[self presentViewController:gcViewController animated:YES completion:nil];
   }

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

在我的 MenuScene.m 和 EndScene.m 中,我有这段代码来显示屏幕上显示为标签的最佳分数。

      _labelScoreBest = [[SimpleLabel alloc] initWithText:[NSString stringWithFormat:@"%ld", (long)[[NSUserDefaults standardUserDefaults] integerForKey:@"bestScore"]] fontSize:MS_FONT_SIZE_LABEL_SCORE_BEST position:MS_POSITION_LABEL_SCORE_BEST colorByHEX:MS_FONT_COLOR_LABEL_SCORE_BEST andZPosition:MS_ZPOSITION_LABEL_SCORE_BEST];

在屏幕上显示最好的分数。我如何让这个报告给我设置的排行榜。我的排行榜标识符由 GlobalSettings.h 中的编译指示标记定义为我在 iTunes Connect 上创建的排行榜 ID。

我希望这一切都有意义,并且有人知道如何提供帮助。

【问题讨论】:

    标签: ios objective-c sprite-kit game-center


    【解决方案1】:

    您必须将高分提交到 GameCenter:

    func addLeaderboardScore(score: Int64) {
        var leaderboardID = "YOURLEADERBOARDID"        
        let newGCScore = GKScore(leaderboardIdentifier: leaderboardID)
        newGCScore.value = score
        newGCScore.leaderboardIdentifier = leaderboardID
        GKScore.reportScores([newGCScore], withCompletionHandler: {(error) -> Void in
            if error != nil {
                print("Score not submitted")
            }
        })
    }
    

    【讨论】:

    • 我实际上最终做了一些与你的 func 非常相似的事情
    【解决方案2】:
      -(void)reportScore{
      if(gameCenterEnabled)
     {
    int64_t newScore = (int64_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"bestScore"];
    
    GKScore *score = [[GKScore alloc] initWithLeaderboardIdentifier:_leaderboardIdentifier];
    score.value = newScore;
    
    [GKScore reportScores:@[score] withCompletionHandler:^(NSError *error) {
        if (error != nil) {
            NSLog(@"%@", [error localizedDescription]);
        }
    }];
    NSLog(@"Yo we're totally reporting the score now");
    }
    

    还在我的 GameCenter 代码中添加了 NSNotification

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reportScore) name:@"reportScore" object:nil];
    

    【讨论】: