2009-06-02 4 views
10

Dans XNA, quand est-il approprié de rendre le contenu de votre jeu en utilisant plus d'un spritebatch? Jusqu'à présent, je n'en ai jamais utilisé plus d'un, et je n'ai jamais remarqué aucun inconvénient à cette approche.Quand utiliser plusieurs lots d'images-objets dans XNA?

Dans quelles situations l'utilisation de plusieurs spritesbatches serait-elle recommandée ou même nécessaire?

Répondre

7

Il y a très peu de cas dans lesquels l'utilisation de plusieurs SpriteBatches est nécessaire. Un exemple que je vois autour d'un lot est une situation dans laquelle vous souhaitez appliquer différents post-traitement/renderstates à différents ensembles de sprites, ce qui nécessite un SpriteBatch distinct pour chaque ensemble.

Il est généralement considéré comme une bonne pratique d'utiliser un seul lot dans la mesure du possible, car dessiner autant de choses que possible dans un lot est beaucoup plus performant que de répartir le travail sur plusieurs lots. De plus, comme vous ne pouvez contrôler l'ordre de tri qu'au sein d'un SpriteBatch unique, il peut être plus difficile (ou impossible) de contrôler la profondeur entre les sprites de différents lots.

En bref: il y a des situations imaginables où vous voudrez peut-être à le faire, mais ce n'est pas du tout commun et en général, vous devriez en tenir à l'aide d'un SpriteBatch à moins que vous connaissez que vous ne pouvez pas accomplir ce que vous voulez sans en utiliser plus d'un.

+0

un cas d'utilisation standard pourrait vouloir utiliser un différent TextureAddressMode tel que Wrap – markmnl

0

Il peut également être plus facile dans les cas avec DrawableGameComponents d'avoir un SpriteBatch par DrawableGameComponent au lieu d'essayer de le contourner.

2

Here est un bon exemple de quand utiliser plus de 1 SpriteBatch (le blog de Shawn est - comme d'habitude - la source définitive). SpriteBatch ne fait réellement aucun dessin jusqu'à ce que vous appeliez la méthode End.

Cela signifie que vous pouvez commencer plusieurs lots qui se chevauchent avec des paramètres différents, dessiner des sprites dans n'importe quel ordre en utilisant n'importe quelle combinaison des instances de lot, et contrôler l'ordre dans lequel le contenu entier de chaque lot est dessiné.

On notera que cet exemple est d'optimiser les performances pour une scène avec des alpha-mélange et sprites triés par profondeur. Lorsque (ou plutôt, si) vous rencontrez des problèmes de performances, il peut être utile d'utiliser plusieurs SpriteBatches. Jusque-là, vous feriez probablement mieux de rester simple.