什么是更经济的平铺纹理的方法?

时间:2011-09-25 22:50:29

标签: c# xna spritebatch

我正在开发基于平铺的2D游戏。我把事情分成了诸如skybackground,landbackground,town,UI等组件,每个组件都处理它的绘图。在调用任何绘制调用之前,我spritebatch.Begin()使用默认值,以便我在1批中绘制所有内容。

为了绘制土地,我在该区域重复绘制一个方形的土地纹理,直到我填满它。但是,有一个名为spriteBatch的{​​{1}}模式就是这样做的。缺点是我必须通过将我的一个全局linear wrap多次分解为每个组件来改变我的设计。

所以我的问题是什么更好/更经济,手动平铺纹理或分割子组件中的spritebatch.begin()begin()

还有其他问题可能需要我拆分一个end(),那么1额外spriteBatch.Begin()有多重要?还是10个?还是100多?我想知道我应该在多大程度上开始担心添加更多spriteBatch.Begin()

1 个答案:

答案 0 :(得分:1)

最好的解决方案是在GPU而不是CPU上进行尽可能多的工作(例如,通过利用平铺等)并尽可能少地调用SpriteBatch.Begin()...

听起来这里的最佳解决方案不是采用任何极端。

为什么不只有两个SpriteBatches并用于你的土地而另一个用于其他一切?

e.g。重新构建您的解决方案,以便:

  • 两个SpriteBatches都会传递到每个组件中,让组件决定使用哪个组件? ... ...或

  • 每个组件都有一个属性,指示它需要哪个SpriteBatch并在绘制时传入适当的一个?

至于每个SpriteBatch.Begin()的影响,它实际上取决于你的特定游戏(以及完成前一个spriteBatch并开始下一个spriteBatch所需的工作量)所以我建议不断测试和监控绩效是确定何时应该关注的最佳方式。