检索GKLocalPlayer之上的两个朋友的分数

时间:2013-09-06 12:25:50

标签: iphone ios objective-c game-center

我想在我的游戏首页上展示一个非常小的排行榜片段,基本上显示你的得分和你周围两个朋友的得分(你的得分高于和低于你)。我已经阅读了苹果文档并且看不到这样做的方法,除非我指定所有朋友并指定一个巨大的范围以确保我得到所有的朋友,然后我可以过滤。检索此列表似乎效率低,尤其是当用户可能在移动设备上时。如何在不下载整个朋友列表然后过滤的情况下实现我想要的目标?

这是我目前拥有的(没有过滤)

GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init];
if (leaderboardRequest != nil)
{
    leaderboardRequest.playerScope = GKLeaderboardPlayerScopeFriendsOnly;
    leaderboardRequest.timeScope = GKLeaderboardTimeScopeAllTime;
    leaderboardRequest.category = @"HighScore";
    leaderboardRequest.range = NSMakeRange(1,100);
    [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
        if (error != nil)
        {
            // Handle the error.
        }
        if (scores != nil)
        {
            GKScore* myScore = leaderboardRequest.localPlayerScore;

            NSLog(@"Me: %@: %d",myScore.playerID, (int)myScore.value);

            // Process the score information - here I would filter
            for (GKScore* score in scores) 
            {
                NSLog(@"%@: %d",score.playerID, (int)score.value);
            }
        }
    }];
}

1 个答案:

答案 0 :(得分:0)

以下代码可能会对您有所帮助。

  

来自Game Center编程指南:
      GKLeaderboard 范围:您可以选择特定范围内的分数。例如,范围[1,10]返回查询找到的最佳十个分数。
      GKScore 排名:排行榜搜索结果中得分的位置。

PS。我无法测试它。 最好的问候。

GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init];

if (leaderboardRequest != nil)
{
    GKScore* myScore = leaderboardRequest.localPlayerScore;

    leaderboardRequest.playerScope = GKLeaderboardPlayerScopeFriendsOnly;
    leaderboardRequest.timeScope = GKLeaderboardTimeScopeAllTime;
    leaderboardRequest.category = @"HighScore";
    leaderboardRequest.range = NSMakeRange(myScore.rank-1, myScore.rank+1);

    [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
        if (error != nil)
        {
            // Handle the error.
        }
        else 
        {
            // ...
        }
    }];
}