游戏结束后,会报告得分(reportables
是一组GKScore
个对象):
GKScore.reportScores(reportables, withCompletionHandler: {(error) -> Void in
if (error != nil) {
Log.INFO("reportScores callback: \(error)")
} else {
Log.INFO("reported score")
self.populate_high_scores(leaderboard)
}
})
populate_high_scores
向GKLeaderboard
设置请求,然后发出呼叫以检索高分:
request.loadScoresWithCompletionHandler({(scores, error) -> Void in
self.populate_high_scores_handler(scores, error: error)
})
所以刷新:
从GameCenter返回的分数不包括刚刚保存的分数。请注意,在 next 运行时,将返回分数。即当前的高分是50.用户玩游戏,得分100. GameCenter返回50分。用户再次玩游戏,得分150. GameCenter返回100分。
我不确定这是否是GameCenter Sandbox模式的“功能”,或者是否应该解决这个问题。
事实上,我是从GameCenter中检索正确的分数子集(减去最近设定的分数)。此外,在 GameCenter从reportScores
成功返回后,肯定会发出高分的请求。
答案 0 :(得分:1)
众所周知,游戏中心在沙盒中存在更新数据的问题,开发人员在服务器上获得的优先级最低。
尝试在非高峰时间测试您的代码(早上和半夜最适合我)
您可以做的另一件事是提交您的分数并继续检查排行榜,直到它更新,然后再次提交以确保一切正常。
我最近在同时提交到3个排行榜时遇到了这个问题,在我测试的时候只有部分排行榜会更新,但现在这些代码在现实世界中存在并且没有问题。