2

有没有办法获得他刚刚发布的球员的分数排名,即使分数不是他的最好?

[GKScore reportScoreWithCompletionHandler:] 用于将得分发布到 GameCenter,但其“排名”始终为零。'rank' 值仅在调用 [GKLeaderboard loadScoresWithCompletionHandler:] 时有效,但它是玩家今天/周/所有时间的最佳得分的排名。

最好的地方是[GKScore reportScoreWithCompletionHandler:],使'rank'值在从gamecenter返回时有效。

谢谢你。

4

1 回答 1

1

AFIK 没有这样的解决方案。GameCenter 仅存储玩家的最好成绩。

读这个

所以,如果你真的想这样做,你必须自己给玩家排名。

  1. 从排行榜中检索所有分数。
  2. 检查当前分数的排名。

- 下面的示例代码

-(void) findRankWithScore: (int64_t)score
{
    GKLeaderboard *leaderboard = [[GKLeaderboard alloc] init];

    if (leaderboard != nil) {
        leaderboard.category = @"YourCategory";
        leaderboard.timeScope = GKLeaderboardTimeScopeWeek; //or all time, day... pick one.

        [leaderboard loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
            int rank = 0;
            if (error == nil && scores != nil) {
                for (GKScore* refScore in scores) {
                    //NOTE: Retrieved score array is sorted already.
                    if (refScore.value <= score) {
                        rank = refScore.rank - 1;
                        if (rank < 1) {
                            rank = 1;
                        }
                        break;
                    }
                }
                //show the rank to player. using delegate, notification, popups etc...

            }else {
                //handle errors
            }
        }];
    }
}

此外,从 GameCenter 中检索每个排名结果的所有分数需要花费很多。

因此,我建议您存储分数数组并重复使用它,即使它会牺牲您的排名准确性。(并在某个时间间隔或类似的时间刷新分数数组)

于 2013-09-06T10:21:43.920 回答