何时在XNA中使用多个雪碧批次?

何时在XNA中使用多个雪碧批次?,xna,Xna,在XNA中,何时可以使用多个spritebatch渲染游戏内容?到目前为止,我从未使用过多个,也从未注意到这种方法的任何缺点 在什么情况下需要使用多个spritebatch?很少有需要使用多个spritebatch的情况。我经常看到的一个例子是,您希望对不同的精灵集应用不同的后期处理/渲染状态,这需要为每个精灵集分别使用一个SpriteBatch 如果可能的话,通常认为最好只使用一个批次,因为在一个批次中绘制尽可能多的东西要比在多个批次中分散工作更有效。此外,由于只能在单个SpriteBatch

在XNA中,何时可以使用多个spritebatch渲染游戏内容?到目前为止,我从未使用过多个,也从未注意到这种方法的任何缺点


在什么情况下需要使用多个spritebatch?

很少有需要使用多个spritebatch的情况。我经常看到的一个例子是,您希望对不同的精灵集应用不同的后期处理/渲染状态,这需要为每个精灵集分别使用一个SpriteBatch

如果可能的话,通常认为最好只使用一个批次,因为在一个批次中绘制尽可能多的东西要比在多个批次中分散工作更有效。此外,由于只能在单个SpriteBatch中控制排序顺序,因此可能会使控制不同批次的SpriteBatch之间的深度变得更加困难(或不可能)


简言之:在一些可以想象的情况下,你可能想要这样做,但这并不常见,一般来说,你应该坚持使用一个SpriteBatch,除非你知道不使用多个SpriteBatch就无法完成你想要的任务。

在使用DrawableGameComponents的情况下,为每个DrawableGameComponents设置一个SpriteBatch可能会更容易,而不是试图传递

是一个很好的例子,说明什么时候应该使用多个SpriteBatch(肖恩的博客和往常一样是最终的来源)

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


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

标准用例可能希望使用不同的纹理模式,例如Wrap