2011-09-25 77 views
0

我正在开发基于2D的游戏。我已将事物分解为诸如skybackground,landbackground,城镇,UI等组件,并且每个组件都处理其绘图。在调用任何绘制调用之前,使用默认值I spritebatch.Begin(),以便在1批次中绘制所有内容。什么是平铺纹理的更经济的方法?

为了绘制地块,我反复在整个地区绘制一个方形的土地纹理,直到我填满它。然而,有一个名为linear wrapspriteBatch模式就是这样做的。不利的一面是,我将不得不改变我的设计,将我的全球产品spritebatch.begin()多次拆分为每个组件。

所以我的问题是什么更好/更经济,手动平铺纹理或拆分子组件之间的begin()end()

还有其他问题可能需要我拆分一个spriteBatch.Begin(),那么多1个额外的spriteBatch.Begin()有多重要?还是10个?还是100多?我想知道在什么规模下我应该开始担心增加更多begins()

+0

3次读过这个问题,我不明白超过1个spritebatch可以提供多大的帮助。在xna中,您应该绘制从您的绘图中调用的绘图或方法的所有内容。这导致你总是可以将批处理作为引用发送到需要的地方,所以你为什么想要多于一个。有些代码可以帮助我们获得一种方法来将开始/精灵的数量减少到一个。 – Olle89

回答

1

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

这听起来像是这里的最佳解决方案并不符合任何一个极端。

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

例如重新设计的解决方案,以便:

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

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

对于每个SpriteBatch.Begin()的影响,这真的取决于你的特定游戏(和需要发生,以完成以前spriteBatch,并开始下一个工作的量),所以我会建议持续测试和监控性能是确定何时应该关心的最佳方式。

+0

感谢您的答案,我从来不知道我可以有超过1个spritebatch。 – TrueGrime