何时在XNA中使用多个精灵批处理?

11

在XNA中,什么情况下使用多个SpriteBatch来渲染游戏内容比较合适?到目前为止,我从未使用过多个SpriteBatch,并且没有注意到任何这种方法的缺点。

在哪些情况下使用多个SpriteBatch是必要的?

3个回答

7
很少有情况需要使用多个SpriteBatch。一个经常被提到的例子是,当你想要对不同的精灵集应用不同的后处理/渲染状态时,需要为每个集合使用单独的SpriteBatch。
通常情况下,如果可能的话,使用一个批次被认为是最佳实践,因为在一个批次中绘制尽可能多的物体比在多个批次中分散工作要更高效。此外,由于您只能在单个SpriteBatch内控制排序顺序,因此可能会更难(或不可能)在不同批次的精灵之间控制深度。
简而言之:虽然有一些情况可能需要这样做,但它并不常见,在一般情况下,您应该坚持使用一个SpriteBatch,除非您知道没有使用多个SpriteBatch就无法完成您想要的事情。

一个标准的使用情况可能是想要使用不同的TextureAddressMode,例如Wrap。 - markmnl

3

这里有一个很好的例子,说明何时需要使用多个SpriteBatch(Shawn的博客--像往常一样--是权威的来源)。

SpriteBatch在调用End方法之前不会实际进行任何绘制。这意味着您可以使用不同的设置开始多个重叠的批处理,使用任何组合的批处理实例以任何顺序绘制精灵,并通过您的End调用的顺序控制每个批处理的整个内容的绘制顺序。

请注意,本示例旨在优化具有深度排序和alpha混合的场景的性能。当(或者更确切地说,如果)遇到性能问题时,使用多个SpriteBatch可能会有所收益。在此之前,保持简单可能更好。


1

对于与 DrawableGameComponents 相关的情况,每个 DrawableGameComponent 都有一个 SpriteBatch 可能会更容易,而不是试图传递此参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接