2010-07-07 141 views
1

我已經開始進入遊戲開發;我已經完成了一些教程並閱讀了大量文章,但是我不確定的一件事是管理大量臨時對象的最佳方式,例如,子彈。管理遊戲中子彈的最佳方式是什麼?

如果每個實體管理自己的子彈,我應該有一個全球性的子彈經理或我應該創建每一顆子彈作爲一個新的全面的單個對象(這似乎非常低效雖然)?

此外,使用組件模式應該怎麼辦性質,似乎通用時,例如位置,速度等。? 我讀過的一些東西似乎認爲所有東西都應該在某種組件中,而其他東西似乎認爲通常會被各種組件訪問的泛型屬性應該是實體類本身的成員。

原諒我,這可能是簡單的,但我要確保我在想在正確的方向。

非常感謝!

+1

我沒有太多的經驗,但看看Doom或Quake等遊戲的源代碼。 AFAIK,他們擁有像火箭這樣緩慢移動/可見物體的「完整」物體,以及像子彈這樣的「快速」/不可見物體,它可以「畫」一條線並看它是否碰到某些物體(如光線跟蹤)。但我沒有真正檢查過它。確保每個子彈/火箭/任何有確定的壽命(火箭在X秒後爆炸,子彈的「虛擬」線在Y米後結束以避免進入無限) – 2010-07-07 22:35:25

+1

值得注意的是,許多遊戲並未實施子彈不僅僅是光線廣播和結果。沒有什麼需要堅持的;玩家按下觸發器,檢查是否有什麼東西會抓住「子彈」,損壞那個東西。我想你需要創造一些東西,如果你正在批量/推遲你的視線/碰撞測試,但它不一定是一個「子彈」對象。 – 2010-07-08 21:42:10

+0

我知道那個Dash,但我正在考慮沿着可能有大量可見射彈(認爲是垂直射手或類似小行星的東西)的街機遊戲。 感謝您的評論。 – JamesK89 2010-07-09 22:04:07

回答

3

將每個子彈創建爲「完全成形的對象」不應該效率太低 - 請查看Object pool pattern,其中概述了加速這些對象創建的方法。

至於你的問題回覆:組件和通用性,這取決於你想如何嚴格遵循組件體系結構。如果你想對組件架構非常嚴格,每個屬性都應該在一個組件中,而不同的組件應該相互交流。否則,出於效率原因,在主要對象中共享一些屬性。有關更多信息,請查看組件行爲模式this page

+0

謝謝你,我從來沒有想過使用對象池作爲子彈。 Stack Overflow存在的好事,否則我們會錯過各種聰明的解決方案。 如果有其他人有任何補充,我想聽聽它並學習。 – JamesK89 2010-07-07 22:59:03

3

原始地震用來實體固定大小的池(其有時也被稱爲法令)。任何存在於幀之間的東西都是一個實體。這包括像世界和門一樣的「形狀物理」事物,怪物,玩家和指甲等矩形物理物體,武器等類型透明的物體,觸發區域等不可見但可觸摸的矩形物體,以及延遲事件等完全非物理事物。

我覺得地震的限制是一樣的東西700個法令;如果超出限制,遊戲將崩潰。我認爲edicts只是存儲在一個數組中,因爲任何edict存在的每個屬性都存在於它們中。

相關問題