2013-05-13 59 views
0

我正在使用游戏中心进行基于回合的比赛。我不会在本地保存任何匹配数据。在比赛进行的同时,其中一名球员结束比赛并为他自己提交比分。当其他玩家启动游戏时,他会从游戏中心获得所有匹配(包括完成)。我的问题是,我无法确定我已经提交了哪个比赛的比分。为了更好的理解,我列出了scenerio的步骤。如何确定比赛得分是否已提交

  • 鲍勃开始比赛
  • 爱丽丝接受比赛
  • 爱丽丝扮演&端转
  • 鲍勃扮演&端转
  • ...
  • ...
  • ..
  • 鲍勃结束比赛& submits his sc矿石到排行榜
  • 爱丽丝推出游戏,并从游戏中心获得10场成品赛。

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

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

我是否必须在本地保存比赛数据?

我想也使用比赛的最后一个回合日期,并保存在本地“最后得分提交日期”。

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

回答

0

我发现NSSplendid曾指出我的上下文属性后的解决方案。每次我设置分数timeIntervalSince1970的上下文属性,并比较匹配的最后一个回合日期与它。其实GKScore已经拥有日期属性,但设置环境对我更好。由于多场比赛和单人比赛得分报告。

+0

我建议看看iOS7的API,可能有些东西(: – NSSplendid 2013-06-28 11:18:51

0

每个GKTurnBasedMatch有一个matchID财产。如果本地用户尚未提交分数,请使用它来唯一标识游戏并在本地记住。

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

+0

据我所知,iCloud服务适用于apple-id,它与gamecenter-id不同。所以如果有人登录别人的设备,那么他会得到双倍的分数。 – Mert 2013-05-14 14:09:30

+0

当然,你也可以存储playerID,但边缘情况依然存在。 – NSSplendid 2013-05-16 12:29:15

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

+0

感谢您指出上下文属性。当我用loadScoresWithCompletionHandler检索分数时,我只得到一个对象,最后一个。所以我只能为一场比赛保存一个场景。如果我有10场比赛结束? – Mert 2013-05-27 10:06:48

+0

我不认为应该发生 – NSSplendid 2013-05-27 15:37:04

+0

+1指向上下文属性 – Mert 2013-06-10 08:37:11