如果我沒有弄錯,你基本上是問如何將遊戲分成模型 - 視圖 - 控制器範例。
簡而言之,模型就是您遊戲的狀態。在O-O術語中,您可以將模型看作遊戲中的所有對象。
控制器是在每個更新週期中應用於遊戲狀態(在本例中爲所有遊戲對象)的一組規則。這可以在所有對象中實現爲一個名爲update()的方法,也可以是在您的遊戲循環中調用的函數,系統地遍歷所有需要更新的對象,並更新它們。你也可以把Controller當作遊戲循環本身。它會調用一切來更新,然後在屏幕上繪製並重復,除非滿足一些條件,否則它會告訴程序執行其他操作。這樣,你幾乎有兩個嵌套的MVC結構。一個通過菜單等來控制程序的流動,另一個專用於遊戲本身。
視圖只是您的遊戲的圖形表示。這可以像屏幕上的文本一樣簡單,但在您的情況下,它是2D圖形。爲了實現這一點,你可以讓每個對象都直接包含圖形狀態,或者封裝。視圖只會查詢所有對象的圖形狀態,然後將其分流到屏幕上。再次,這可以在每個對象的基礎上實現,比如稱爲draw()的方法,或者直接從遊戲循環中調用的另一個系統函數。通常的做法是創建一個名爲'Sptite'或類似的東西來保存圖形信息,並且讓每個繪製的遊戲對象都有一個個人實例。還要注意,視圖本身不需要是一個對象。儘管有時需要存儲直接影響視圖操作的信息(如窗口大小),但在這種情況下,視圖可以是一個對象,僅僅在遊戲循環中調用的函數就足夠了。控制器也是如此。
另外請記住,這些分割可以進一步分割,使生活更簡單。例如:控制器可以分爲AI處理,動作更新和碰撞檢查。視圖可以分爲遊戲對象顯示和HUD,而模型可以是所有對象+獨立於遊戲對象的所有狀態(如分辨率,窗口大小,按鍵配置等遊戲設置)。
我知道這可能有點矯枉過正,它可能有額外的信息,但希望它能回答你的問題,並給你從何處開始的想法。
也許你會發現[這篇文章](http://www.gamasutra.com/view/feature/130693/the_guerrilla_guide_to_game_code.php)有幫助..如果你還沒有讀過它。 – 2012-07-14 15:04:37
@tereško所以基本上ScaryMonsterEnemyView將持有ScaryMonsterEnemyModel?這可能是有道理的,我猜... MVC中的 – tobes 2012-07-14 15:23:08
視圖不支持模型。該視圖僅接收來自模型圖層的數據。它要麼從模型層(經典MVC)發送,要麼通過視圖(Model2 MVC)請求。 – 2012-07-14 17:25:25