3

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

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

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);
            }
        }
    }];
}
4

1 回答 1

0

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

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

附言。我无法测试它。此致。

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 
        {
            // ...
        }
    }];
}
于 2013-09-06T15:06:28.663 回答