#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.