如何确定是否已提交比赛得分

时间:2013-05-13 08:05:13

标签: ios game-center leaderboard gkturnbasedmatch

我正在开发一款使用游戏中心的回合制游戏。我不在本地保存任何匹配数据。当游戏继续进行时,其中一个玩家结束游戏并为他自己提交分数。当其他玩家启动游戏时,他从游戏中心获得所有匹配(包括完成)。我的问题是,我无法确定哪个游戏我已经提交了分数。为了更好地理解,我列出了场景的步骤。

  • 鲍勃开始比赛
  • Alice接受比赛
  • 爱丽丝扮演&结束
  • Bob扮演&结束
  • ...
  • ...
  • ...
  • 鲍勃结束比赛&将他的分数提交给排行榜
  • Alice推出游戏并从游戏中心获得10场比赛。

现在我怎么知道,我提交了哪些比赛分数。据我所知,在比赛结束后我无法更新比赛数据。所以我不能保存任何标志来匹配数据了。

我有什么问题并且过早完成比赛吗?是否所有玩家都必须等待其他玩家提交他们的分数?

我是否必须在本地保存匹配数据?

我还想到了比赛的最后一个回合日期并在本地保存“最后得分提交日期”。

在本地保存匹配数据或日期对多个设备不利。

3 个答案:

答案 0 :(得分:1)

要尝试的另一件事: 如果您使用的是Game Center的排行榜,则可以查看contextplayerID [1]属性。然后,当客户注意到游戏G已经结束但不确定分数是否已经过帐时,首先从排行榜下载本地playerID的排行榜得分,并检查context是否与对于刚刚完成的游戏G matchID

如果没有,请发布乐谱并将matchID作为提示放在乐谱的context属性中。

[1] https://developer.apple.com/library/mac/#documentation/GameKit/Reference/GKScore_Ref/Reference/Reference.html#//apple_ref/occ/instm/GKScore/reportScoreWithCompletionHandler

答案 1 :(得分:0)

每个GKTurnBasedMatch都有一个matchID属性。如果本地用户已为其提交了分数,则使用此选项来唯一标识游戏并在本地记住。

我建议通过iCloud键值存储同步提交的分数列表,以避免如果用户在一个帐户上玩游戏而在很多设备上玩游戏时得分高分。

答案 2 :(得分:0)

我在NSSplendid指向了context属性后找到了解决方案。每次我设置得分timeIntervalSince1970的上下文属性,我都会比较匹配的最后一个转弯日期。实际上GKScore已经有了date属性,但设置上下文对我来说更好。由于多场比赛和单人得分报告。