我正在开发基于平铺的2D游戏。我把事情分成了诸如skybackground,landbackground,town,UI等组件,每个组件都处理它的绘图。在调用任何绘制调用之前,我spritebatch.Begin()
使用默认值,以便我在1批中绘制所有内容。
为了绘制土地,我在该区域重复绘制一个方形的土地纹理,直到我填满它。但是,有一个名为spriteBatch
的{{1}}模式就是这样做的。缺点是我必须通过将我的一个全局linear wrap
多次分解为每个组件来改变我的设计。
所以我的问题是什么更好/更经济,手动平铺纹理或分割子组件中的spritebatch.begin()
和begin()
?
还有其他问题可能需要我拆分一个end()
,那么1额外spriteBatch.Begin()
有多重要?还是10个?还是100多?我想知道我应该在多大程度上开始担心添加更多spriteBatch.Begin()
。
答案 0 :(得分:1)
最好的解决方案是在GPU而不是CPU上进行尽可能多的工作(例如,通过利用平铺等)并尽可能少地调用SpriteBatch.Begin()...
听起来这里的最佳解决方案不是采用任何极端。
为什么不只有两个SpriteBatches并用于你的土地而另一个用于其他一切?
e.g。重新构建您的解决方案,以便:
两个SpriteBatches都会传递到每个组件中,让组件决定使用哪个组件? ... ...或
每个组件都有一个属性,指示它需要哪个SpriteBatch并在绘制时传入适当的一个?
至于每个SpriteBatch.Begin()的影响,它实际上取决于你的特定游戏(以及完成前一个spriteBatch并开始下一个spriteBatch所需的工作量)所以我建议不断测试和监控绩效是确定何时应该关注的最佳方式。