2011-03-22 54 views

回答

4

GameComponent s是一個很棒的工具,它可以讓你的代碼更容易使用和重用。我會不顧安德魯羅素從另一個SO問題的答案。這是高度偏見。 GameComponent s很好用。它們與Singleton類似。你不會放棄使用Singleton模式,因爲有人對此表示否定的意見,對嗎?

試圖複製框架中已經存在的這個功能是愚蠢的。安德魯羅素的意見是,GameComponent s可以讓你的代碼更混亂。我會爭辯說,試圖編寫自己的分層繪圖系統會讓你的代碼更加混亂。

底線:使用已存在的功能。不要改變你的編碼風格,因爲有人侮辱了它。當舊款式仍然有效時,您不必使用最新和最好的產品。

+1

*技術上*我的答案是「自以爲是」(知情的意見,不低於),而不是「偏見」。如果你需要一個遊戲全局的,數據驅動的,基於組件的遊戲系統 - 那麼很明顯使用GameComponent--不會重複功能。然而,就像Singleton模式一樣,這個體系結構在大多數時候都不是理想的,[正如我在這個答案中所描述的](http://gamedev.stackexchange.com/questions/9204/what-are-the-cons-的 - 使用 - drawablegamecomponent換每個實例 - - 一個遊戲 - 目標/ 9209#9209)。僅僅因爲API存在並不意味着它是構建遊戲的唯一方式或最佳方式。 – 2011-03-23 07:12:50

3

我不會告訴你哪種方法更好,但是這是你會怎麼做,而不使用GameComponents:

在遊戲的Draw方法,你叫粒子系統的順序繪製方法你想要:

smokePlumeParticles.Draw(gameTime); 
explosionSmokeParticles.Draw(gameTime); 
projectileTrailParticles.Draw(gameTime); 
explosionParticles.Draw(gameTime); 
fireParticles.Draw(gameTime); 
+0

第一次繪製調用將是第一個繪製的項目。 @JoDG:你是否打算將煙霧置於背景中,在所有其他物體背後進行繪製? – FreeAsInBeer 2011-03-22 19:35:11

+0

這確實是基於原始代碼的想法:''設置繪製順序,以便在煙霧的頂部出現爆炸和火焰。 \t \t \t smokePlumeParticles.DrawOrder = 100; \t \t \t explosionSmokeParticles.DrawOrder = 200; \t \t \t projectileTrailParticles.DrawOrder = 300; \t \t \t explosionParticles.DrawOrder = 400; \t \t \t fireParticles.DrawOrder = 500;' – JoDG 2011-03-22 19:38:31

相關問題