AFIK 没有这样的解决方案。GameCenter 仅存储玩家的最好成绩。
读这个
所以,如果你真的想这样做,你必须自己给玩家排名。
- 从排行榜中检索所有分数。
- 检查当前分数的排名。
- 下面的示例代码
-(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 中检索每个排名结果的所有分数需要花费很多。
因此,我建议您存储分数数组并重复使用它,即使它会牺牲您的排名准确性。(并在某个时间间隔或类似的时间刷新分数数组)