2009-06-02 12 views
10

En XNA, ¿cuándo es apropiado presentar el contenido de tu juego utilizando más de un spritebatch? Hasta ahora, nunca he usado más de uno, y nunca he notado ningún inconveniente en este enfoque.Cuándo usar lotes de sprites múltiples en XNA?

¿En qué situaciones se recomendaría o incluso se recomendaría el uso de múltiples spritebatches?

Respuesta

7

Hay muy pocos casos en los que es necesario utilizar varios SpriteBatches. Un ejemplo que veo arrojado por todos lados es una situación en la que desea aplicar diferentes post-procesamiento/renderstates a diferentes conjuntos de sprites, lo que requiere un SpriteBatch por separado para cada conjunto.

Por lo general, se considera una buena práctica usar solo un lote si es posible, ya que dibujar tantas cosas como sea posible en un lote es mucho más efectivo que distribuir el trabajo en varios lotes. Además, dado que solo puede controlar el orden de clasificación dentro de un solo SpriteBatch, puede hacer que sea más difícil (o imposible) controlar la profundidad entre los sprites de diferentes lotes.

En resumen: hay situaciones concebibles en las que es posible que desee hacer esto, pero no es tan común y, en general, se debe pegar a la utilización de una SpriteBatch menos que sabe que no se puede lograr lo que desea sin usar más de uno.

+0

un caso de uso estándar podría querer usar un TextureAddressMode diferente como Wrap – markmnl

0

También puede ser más fácil en casos con DrawableGameComponents tener un SpriteBatch por DrawableGameComponent en lugar de tratar de pasar esto.

2

Here es un buen ejemplo de cuándo usar más de 1 SpriteBatch (el blog de Shawn es, como siempre, la fuente definitiva).

SpriteBatch en realidad no realiza ningún sorteo hasta que llama al método Fin. Esto significa que puede comenzar varios lotes superpuestos con diferentes configuraciones, dibujar sprites en cualquier orden usando cualquier combinación de instancias de lotes y controlar en qué orden se extrae todo el contenido de cada lote ordenando sus llamadas finales.

Tenga en cuenta que este ejemplo trata de optimizar rendimiento para una escena con alfa-mezcla y sprites según profundidad. Cuando (o más bien, if) se encuentra con problemas de rendimiento, puede haber algo que ganar al usar varios SpriteBatches. Hasta entonces, es mejor que lo mantengas simple.

Cuestiones relacionadas