2011-06-28 61 views
1

問題實施/設計建議爲簡單的iPhone遊戲

我創造了一定的卡片比賽中的分數計算器。它在導航和視圖控制器方面變得相當複雜。基本上,我需要的是一種方法來跟蹤當前分數,4個玩家在啓動時實例化的對象和一種跟蹤遊戲進度的方式(遊戲有4種「級別」或「週期」) 。

可能的解決方案

所以我在想什麼做的是建立一個Singleton類分數經理。我還創建了一個玩家對象,我可能會在AppDelegate類中實例化它,並在新的VC加載時讓它們在數組中傳遞它們。

繼續上場比賽

我想應用存儲的最後一場比賽,如果應用程序已經終止,並恢復它在啓動時的選項。我將不得不跟蹤:球員的名字,每位球員的得分,以及每輪比賽的詳細得分表。

我的問題

  • 是我的解決方案在AppDelegate中創建4個玩家對象,並在每個VC通過他們VC的推動好的解決辦法?如果不是,遊戲通常如何實現Player對象?過去我使用C++和Java創建了遊戲,但過於簡單,「遊戲管理器」只有一個類,所以我從來不必處理傳遞玩家對象。此外,如果玩家點擊「返回」並且導航控制器從其堆疊中彈出一個項目,玩家對象是否仍會在前一個VC中實例化?如果沒有,當「後退」按鈕被擊中時我是否也必須通過它?

  • 我可能會將分數管理也跟蹤遊戲的進度,或者遊戲在使用Singleton類的地方。這是一個很好的設計決定嗎?

  • 要存儲名稱,分數和整個記分表,建議只使用NSUserDefault還是使用plist更好?特別是因爲我需要跟蹤記分表?

任何實施建議非常感謝。

回答

2

好問題。我喜歡你實施遊戲的想法。我不建議您實施的唯一概念是在您的AppDelegate中創建玩家。這樣做並沒有什麼壞處,但改變你的AppDelegate也不是一個好習慣。相反,你可能要做的是創建一個單獨的類,例如Player.h和Player.m(如果使用Box2d,則爲Player.mm)。做你想做的事情,並在場景中調用類變量和函數。
其次,使用PList而不是的想法如果要存儲小數據,NSUserDefault將在您希望存儲大量數據時更有效,反之亦然。 This是一個很好的討論,它可能會幫助你。

+0

謝謝。是的,我已經有一個Player.m和Player.h,所以一個Player對象。但是,我是否必須在每次導航控制器推送時都傳遞它們?流行音樂怎麼樣?播放器對象是否保持活動狀態,還是需要在導航控制器被收回時再次通過播放器對象? – darksky

+0

這完全取決於其範圍。我假設的是,你將完整的遊戲邏輯放在一個場景中。在那裏你需要創建一個你的播放器的實例。在全局聲明它,並在init()中初始化它。在不需要的時候,在init()中而不是在dealloc()中釋放它。因爲您可能會在同一場景中以其他方式重新使用它,所以您可以再次創建它。 – Nitish