глубина слоя в разных блоках Begin () и End () spritebatch

#xna #sprite

#xna #спрайт

Вопрос:

У меня есть два разных метода рисования, один из них Game1.Draw(), другой — DrawableGameComponent.Draw() Когда я пытаюсь нарисовать строку с layerdepth в методе draw DrawableGameComponent DrawableGameComponent, это не работает, оно рисуется перед spritebatch, значение layerdepth не влияет на рисунок.

Итак, в чем проблема, как я могу придать эффект layerdepth?

Ответ №1:

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

Если вы хотите добиться многоуровневого эффекта, вам нужно убедиться, что все ваши рисунки выполняются в одном начальном / конечном блоке, или же переключитесь на отложенную сортировку и получите гораздо более точный контроль над порядком, в котором вы рисуете объекты (алгоритм painters)

Ответ №2:

Чтобы сортировка работала с пакетами спрайтов, вам необходимо запустить spritebatch с одной из перегрузок, которая принимает SpriteSortMode

Затем установите для режима сортировки спрайтов значение BackToFront или FrontToBack, затем рисуйте с использованием SpriteBatch. Перегрузка отрисовки, которая принимает layerDepth, представляющий собой значение с плавающей точкой, которое вы можете варьировать от 0.0 до 1.0, чтобы упорядочить ваши спрайты.

В качестве альтернативы вы можете использовать SpriteSortMode.Отложенный, в этом случае первое, что вы рисуете, рисуется на заднем плане, второе, что вы рисуете, рисуется поверх этого и т.д…

Обратите внимание, что при рисовании частично прозрачных спрайтов рекомендуемый режим сортировки — BackToFront.