游戏结束后,将报告分数(reportablesGKScore对象的数组):

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/

10-08 20:57