Когда использовать несколько спрайт-пакетов в XNA?

В XNA, когда уместно рендерить ваш игровой контент, используя несколько спрайтов? До сих пор я никогда не использовал более одного, и никогда не замечал никаких недостатков в этом подходе.

В каких ситуациях было бы необходимо использовать несколько спрайт-пакетов?

Ответ 1

Очень мало случаев, когда необходимо использовать несколько SpriteBatches. Одним из примеров, которые я вижу многократно, является ситуация, в которой вы хотите применить различные постобработки/визуализации к различным наборам спрайтов, для чего требуется отдельный SpriteBatch для каждого набора.

Обычно считается хорошей практикой использовать только одну партию, если это вообще возможно, поскольку рисование как можно большего количества в одной партии намного более результативно, чем распространение работы по нескольким партиям. Кроме того, поскольку вы можете управлять только порядком сортировки в пределах одного SpriteBatch, это может затруднить (или невозможно) контролировать глубину между спрайтами из разных партий.

Вкратце: существуют мыслимые ситуации, в которых вы, возможно, захотите это сделать, но это не все, что обычно и в целом вы должны придерживаться одного SpriteBatch, если не знаете, что не можете выполнить то, что хотите, не используя больше чем один.

Ответ 2

Здесь - хороший пример того, когда использовать более 1 SpriteBatch (блог Shawn - как обычно - окончательный источник).

SpriteBatch фактически не делает никакого чертежа, пока вы не вызовете метод End. Это означает, что вы можете начинать несколько совпадающих партий с разными настройками, рисовать спрайты в любом порядке, используя любую комбинацию экземпляров партии, и управлять тем, какой порядок обрабатывается всем содержимым каждой партии, путем упорядочения ваших вызовов End.

Обратите внимание, что этот пример посвящен оптимизации производительности для сцены с альфа-смешиванием и спрайтами, отсортированными по глубине. Когда (или, вернее, если) вы столкнетесь с проблемами производительности, может быть что-то выиграть, используя несколько SpriteBatches. До тех пор, вы, вероятно, лучше не считаете его простым.

Ответ 3

В случае с DrawableGameComponents также может быть проще иметь SpriteBatch для DrawableGameComponent вместо того, чтобы пытаться передать это.