2011-03-22 55 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

相关问题