游戏结束后,将报告分数(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。
收到回叫指示成功。
向GameCenter请求高分。
在GameCenter中获得高分。
从GameCenter返回的分数不包括刚刚保存的分数。请注意,在下一次运行中,分数将被返回。即当前的最高分是50。用户玩游戏时获得100分。GameCenter返回50分。用户再次玩游戏,获得150分。GameCenter返回100分。
我不确定这是否是GameCenter沙盒模式的“功能”,还是我应该解决的问题。
实际上,我是从GameCenter检索分数的正确子集(减去最近设置的分数)。此外,肯定会在GameCenter从
reportScores
成功返回后发出高分要求。 最佳答案
众所周知,游戏中心在更新数据时遇到问题,而在沙箱中,开发人员在服务器上的优先级最低。
尝试在非高峰时间测试您的代码(早上和半夜最适合我)
您可以做的另一件事是提交分数并不断检查排行榜,直到更新为止,然后再次提交以确保一切正常。
最近,我同时提交给3个排行榜时遇到了这个问题,在我测试时只有其中一些会更新,但是相同的代码现在已经存在于现实世界中,并且没有问题。
关于ios - GameCenter高分不包括最近设定的分数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30982659/