2009-12-29 98 views
14

我試過用C++開發一個2D遊戲,過去只是使用單純的對象,但是在設計過程中,我不知道如何將引擎的哪些部分拆分成更小的對象,他們應該做什麼以及如何使他們與對方妥善互動。我正在尋找書籍,教程,論文,以及詳細解釋遊戲引擎設計的任何內容。謝謝。面向對象的遊戲設計理論

+2

你可能想看看XNA,看看主遊戲循環是如何工作的。 – StrixVaria 2009-12-29 22:15:37

+7

請勿使用「單純物體」。使用任何有意義的。你的遊戲不一定要嚴格OOP。它必須工作,它應該是最好的,結構良好的代碼。兩者都不需要OOP。使用每種可用的工具編寫你的遊戲。類,函數,仿函數,模板,過程編程,面向對象編程,函數式編程,泛型編程,無論是否適合手頭的任務。不要僅僅因爲20年前有些人認爲這是聖盃就限制自己。 – jalf 2009-12-30 04:12:22

回答

19

強制性閱讀:http://scientificninja.com/advice/write-games-not-engines

爲什麼你認爲你需要一個遊戲引擎?編寫你需要的代碼來實現你的遊戲。隨着需求的變化,隨時修改它。當你有一個完整的遊戲時,退後一步,看看結果是什麼樣子。

你不能也不應該在開始時展示完整的類圖。簡要概括一下你想要什麼通用組件,以及他們的責任應該是什麼,然後嘗試對其進行編碼。從你確定的課程開始。遲早,他們中的一些人會變得笨重笨重,所以你把它分成多個小的。有時候,你可能會發現幾個類基本上都在做同樣的事情,所以你把它們合併在一起。希望遲早你會得到一個設計,工作,這是比你如果試圖設計一個遊戲引擎預先得到的更多。

+0

我喜歡try&refactor方法。製作OO設計需要經驗 – theactiveactor 2009-12-30 03:14:55

+6

即使有經驗,它仍然是1)不可能的,並且2)在實施它之前嘗試提出完整的詳細設計是一個壞主意。整個「敏捷」的事情發生了很多,這是有原因的。你會*遇到你沒有想到的問題,所以當你得到你需要的信息時做出設計決定 - 也就是說,當你試圖實現它,並找出所有的陷阱。 – jalf 2009-12-30 03:38:23

4

如果您之前沒有製作過遊戲,您如何製作引擎?這裏有大量的免費引擎,否則你將花費20年的時間試圖完成某件事情,因爲你會一遍又一遍地重寫。

+0

是的,遊戲的好處在於內容不是引擎,所有優秀的程序員都可以借用其他人的代碼 – Patrick 2009-12-30 08:58:25

3

遊戲中有兩種重要類型的對象。有些對象包含進程,還有一些對象與環境和用戶進行交互。

對於那些運行像改變對象不透明度這樣的過程的對象,你會希望它們獨立於任何類級別的變量。他們應該簡單地接受價值和返回價值。如果你有一個計算重力的過程,那麼這個過程就應該考慮它正在計算重力的物體,並且返回物體正在經歷的重力的大小,以及如果遊戲發生在太空中的話重力的方向。

第二個更重要的對象類型是那些與用戶和環境交互的對象。這些對象應該都包含相同的基類。基類將需要圖像,x和y位置,並且可以具有執行特定過程(如改變變量的速度或方向)的變量。 有了這個基類,您可以使用每個對象「內置」變量(如速度,方向以及x和y位置)執行像前面提到的重力處理一樣的處理。

您還需要設置您的對象以在特定條件下運行代碼。當滿足這些條件之一時,讓基類提供可以運行的函數可能是一個好主意。一些有用的條件函數是當一個對象首次被創建並被銷燬時的一個條件函數。定時器設置後的條件函數。一個有條件的函數可以持續地去你可以放置代碼在屏幕上繪製圖像的地方。有條件的功能關閉當按下鍵盤或鼠標按鈕時。一種有條件的函數,用於每秒設置一定的時間來計算物體上的重力等物體。

這個框架在創建遊戲時對我非常有用。它適用於任何類型的遊戲,並可用於其他類型的程序。對不起,如果我的寫作不清楚,我在我的iPod上打字,我很難回到這裏編輯東西。