如何获得用户的时间和时间?特定排行榜和排名的排名来自Game Center的倍频镜?

时间:2013-10-21 03:00:54

标签: ios game-center leaderboard

就Apple的游戏中心apis而言,我如何请求并取回当地用户对特定排行榜和时间范围的排名?

  • 对于排行榜X(即指定董事会 - 例如Level12_BestTime),对于给定的TimeScope
  • 返回当地球员当前: a)时间,例如12.3秒 b)排名(与朋友一起),例如第12 c)排名(所有参与者),例如123

2 个答案:

答案 0 :(得分:2)

Game Center Programming Guide

复制
GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init];
if (leaderboardRequest != nil)
{
    leaderboardRequest.playerScope = GKLeaderboardPlayerScopeGlobal; // or GKLeaderboardPlayerScopeFriendsOnly
    leaderboardRequest.timeScope = GKLeaderboardTimeScopeToday; // or GKLeaderboardTimeScopeWeek, GKLeaderboardTimeScopeAllTime
    leaderboardRequest.identifier = @"Combined.LandMaps" // Name of the leaderboard
    leaderboardRequest.range = NSMakeRange(1,10); // How many results to get
    [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
        if (error != nil)
        {
            // Handle the error.
        }
        if (scores != nil)
        {
            // Process the score information.
        }
        }];
}

获取特定用户的信息:

 GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] initWithPlayerIDs: match.playerIDs];

在这两种情况下,用户的分数都存储在 localPlayerScore 中,所有分数都在分数中。

但排名可能会有问题。你最多只能获得100分,所以如果排行榜很大,可能需要很多电话。 localPlayerScore 确实包含 rank 值,但这只是相对于当前得分列表。基本上你必须遍历整个排行榜才能找到用户的位置。

答案 1 :(得分:1)

关于问题的第二部分,GKScore的排名属性应该可以解决问题。 根据我的测试,它会根据加载排行榜得分所指定的标准报告玩家的等级,即使玩家的得分超出了要求的范围。 见下面的示例:

GKLeaderboard *board = [[GKLeaderboard alloc] init];
pbBoard.timeScope = GKLeaderboardTimeScopeAllTime;
pbBoard.range = NSMakeRange(1, 1);
pbBoard.identifier = @"myleaderboard";
[pbBoard loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
    if (error != nil) {
        // handle the error.
    }
    if (scores != nil) {
        GKScore* score = [board localPlayerScore];
        NSInteger rank = score.rank;
        // do whatever you need with the rank
    }
}];