在 Apple 的游戏中心 api 方面,我将如何请求并取回特定排行榜和时间范围的本地用户时间和排名?
- 对于排行榜 X(即指定棋盘 - 例如 Level12_BestTime),对于给定的 TimeScope
- 返回本地玩家当前:a)时间,例如 12.3 秒 b)排名(与朋友)例如第 12 位 c)排名(所有玩家)例如第 123 位
在 Apple 的游戏中心 api 方面,我将如何请求并取回特定排行榜和时间范围的本地用户时间和排名?
从游戏中心编程指南复制:
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中,所有分数都存储在score中。
然而,排名可能有问题。您最多只能获得 100 分,因此如果排行榜非常大,可能需要很多电话。localPlayerScore确实包含一个排名值,但这仅与当前分数列表相关。基本上,您必须遍历整个排行榜才能找到用户的位置。
关于您问题的第二部分, GKScore 的 rank 属性应该可以解决问题。根据我的测试,它会根据指定的加载排行榜分数的标准报告玩家的排名,即使玩家的分数超出了请求的范围。请参阅下面的示例:
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
}
}];