2011-05-16 33 views
3

爲了給出關於遊戲的一些背景知識:墜落的物品從頂部浮動,其目的是輕彈/滑動另一個物體來擊打它們。如果一件物品擊中地面,你會失去生命並獲得擊落物品的積分。哪種設計模式可用於2D iPhone遊戲?

這裏是我有點困惑。在O'Reilly的iPhone遊戲開發中。他們聲明AppDelegate繼承了一個遊戲狀態機對象,並且在App Delegate中擁有主遊戲循環。沒有關於MVC。

我打算使用MVC。我擁有爲模型標識的所有對象,並且將使用一個控制器來更新每個模型及其相應的視圖。然後在App Delegate中有一個導航控制器,並從主屏幕中推送某些控制器(播放,指令,統計)。然後讓遊戲循環在我的gameViewController中運行。順便提一下,我使用Chipmunk作爲物理引擎。

這是我的第一場比賽,所以我有點困惑。我將不勝感激任何有關如何着手的建議。我希望在跳入代碼之前從一開始就獲得面向對象的設計。

回答

7

我不認爲MVC真的是你想要的。 MVC可以適用於您的整體應用程序狀態 - 例如菜單視圖,遊戲板視圖等。它在遊戲中並不適合 - 至少只是想到了我的頭頂。

看看gameDev上的這篇文章。從人的有用的模式很多關於這個聰明比我

https://gamedev.stackexchange.com/questions/4157/what-are-some-programming-design-patterns-that-are-useful-in-game-development

+0

尼斯鏈接,一些非常好的信息。 – TurqMage 2011-05-16 21:45:28

+0

謝謝 - 非常有用的線程。 – 2011-05-17 08:20:02

0

難道你不認爲那場比賽狀態機是一種數據模型?我沒有你提到的O'Reilly書,但是你給我的描述非常像MVC。

MVC的主要觀點是將應用程序的內容與內容在屏幕上表示的方式分開。 MVC中的「模型」不必包含從文件或Web服務器讀取的啞數據對象......它可能很容易就是仿真,與其他設備的連接等。我認爲其中的一點是,如果您要拋出應用程序的GUI並將其替換爲腳本,命令行界面或Web服務,那麼該模型就是您要保留的部分。遊戲狀態機當然可以符合這個描述。

在iOS應用程序中讓應用程序委託實例化模型並不罕見。然後,您有視圖控制器知道如何與模型交談,並將其提供的數據轉換爲可以在視圖中顯示的內容。如果模型提供的某些數據是紋理或網格等圖形元素,那沒關係......畢竟這些是遊戲運行的數據。

1

我的MVC進行如下操作。每個創建的遊戲對象只是一個模型。沒有附加邏輯的空數據。當對象被創建時,它也會附加一個Brain或者控制器。每個創建的Brain都添加到Brain列表中。大腦列表更新每個大腦,大腦改變模型。

要在屏幕上顯示某些內容,Brain將模型添加到場景中。場景保留了它正在渲染的所有模型的列表。場景也從遊戲循環更新。場景每次更新都會查看每個模型,任何沒有查看的模型都會被賦予一個視圖(根據模型中的數據創建一個新視圖)。場景然後跟蹤視圖,直到模型的數據表明它不再需要它。

當我在iPhone上工作時,我喜歡將遊戲循環切換到自己的線程上。O'Reilly的那些人非常聰明,儘管如此,我只能說一口鹽。

[NSThread detachNewThreadSelector:@selector(GameLoop:) toTarget:self withObject:nil]; 

然後遊戲循環本身首先更新大腦(或「控制器列表」),然後是場景(或「視圖列表」)。

把它連接在一起的最後一塊是輸入。對於iPhone,我使用全屏視圖。在touchesBegan和touchesEnd的視圖中,我生成了傳遞給InputManager的事件。 InputManager將根據需要將事件發送到不同的模型。