2013-05-13 26 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