Xna 如何在不使用DrawableGameComponent的情况下更改DrawOrder

Xna 如何在不使用DrawableGameComponent的情况下更改DrawOrder,xna,xna-4.0,Xna,Xna 4.0,阅读另一篇文章,似乎DrawableGameComponents不是前进的方向。我自己做了一些研究,并使用中的,我决定去掉DrawableGameComponents的使用。一切都编译得很好,除了我没有可用的DrawOrder,并且示例将其用于粒子 如何更改DrawOrder,就好像我使用的是DrawableGameComponent?GameComponent是一个很好的工具,可以使代码更易于使用和重用。我会忽略安德鲁·拉塞尔对另一个问题的回答。这是非常有偏见的游戏组件s可以使用。他们和单身汉

阅读另一篇文章,似乎
DrawableGameComponent
s不是前进的方向。我自己做了一些研究,并使用中的,我决定去掉
DrawableGameComponent
s的使用。一切都编译得很好,除了我没有可用的
DrawOrder
,并且示例将其用于粒子


如何更改
DrawOrder
,就好像我使用的是
DrawableGameComponent

GameComponent
是一个很好的工具,可以使代码更易于使用和重用。我会忽略安德鲁·拉塞尔对另一个问题的回答。这是非常有偏见的<代码>游戏组件s可以使用。他们和单身汉很相似。你不会因为有人对此表达了否定意见而放弃使用单例模式,对吗

试图复制框架中已经存在的功能是愚蠢的。Andrew Russell的观点是,
GameComponent
s可以让你的代码更混乱。我认为,尝试编写自己的分层绘图系统会使代码更加混乱


底线:使用已经存在的功能。不要因为有人侮辱了你的编码风格而改变它。当旧的样式仍然有效时,您不必使用最新和最棒的样式。

我不会告诉您哪种方法更好,但这是您在不使用游戏组件的情况下可以做到的:

在游戏的“绘制方法”中,可以按所需顺序调用粒子系统的绘制方法:

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

第一次绘制调用将是第一次绘制的项目@乔德:你是想让烟雾出现在背景中,隐藏在所有其他绘制的项目后面吗?这确实是一个想法,基于原始代码:
//设置绘制顺序,以便爆炸和火灾//出现在烟雾顶部。smokePlumeParticles.DrawOrder=100;explosionSmokeParticles.DrawOrder=200;ProjectletRailParticles.DrawOrder=300;explosionParticles.DrawOrder=400;firefarticles.DrawOrder=500从技术上讲,我的回答是“固执己见”(知情的意见,不亚于此),而不是“偏见”。如果您的游戏需要一个全局的、数据驱动的、基于组件的系统,那么显然要使用
GameComponent
s-不要重复该功能。然而,与单例模式一样,这种体系结构在大多数情况下并不理想。API的存在并不意味着它是构建游戏的唯一方式或最佳方式。