就Apple的游戏中心apis而言,我如何请求并取回当地用户对特定排行榜和时间范围的排名?
答案 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
}
}];