我正在尝试在 iOS7 上使用 GameCenter 制作排行榜,仅显示上周提交的分数。
我知道在 iOS7 中打开游戏中心视图控制器时使用时间范围已被弃用,但我发现的每一篇文章都建议在游戏中建立一个排行榜来解决这个问题。
我们在游戏中实现了自己的排行榜,我们使用 loadScoresWithCompletionHandler 获取,但 timeScope 设置似乎仍然不起作用。无论我将其设置为什么,我都获得了用户有史以来最好的分数,而不是最后一天/一周的最好成绩。
有没有其他人发现这个或者它对其他人有用?我确认分数是错误的,查看任何收到的 GKScores 上的“日期”。
有问题的代码如下:
const char* szName("LeaderboardName_Week1");
NSString* pxLeaderboardName = [NSString stringWithUTF8String:szName];
GKLeaderboardTimeScope eTimeScope = GKLeaderboardTimeScopeWeek;
GKLeaderboard* leaderboardViewer = [[[GKLeaderboard alloc] init] autorelease];
if (leaderboardViewer)
{
[leaderboardViewer setIdentifier: pxLeaderboardName];
[leaderboardViewer setTimeScope: eTimeScope];
[leaderboardViewer setRange: NSMakeRange(1, 100)];
[leaderboardViewer setPlayerScope: (bFriendsOnly)?GKLeaderboardPlayerScopeFriendsOnly:GKLeaderboardPlayerScopeGlobal];
[leaderboardViewer loadScoresWithCompletionHandler:^(NSArray* scores, NSError* error)
{
if (error || !scores)
{
NSLog(@"GameKit Score retrieval Error:\n%@", error);
}
else
{
NSLog(@"GameKit Score retrieval complete, %d scores. Retrieving player names.", (u_int)scores.count);
GKScore* playerScore = leaderboardViewer.localPlayerScore;
u_int uIndex2;
for (uIndex2 = 0; uIndex2 < scores.count; ++uIndex2)
{
GKScore* score = [scores objectAtIndex:uIndex2];
//score.date is out of the requested range at this point.
xEntry.m_uRank = static_cast<u_int> (score.rank);
xEntry.m_lScore = score.value;
xEntry.m_uContext = score.context;
}
}
}];
}
我在沙箱里做这一切。任何帮助表示赞赏!