layerdepth в другом блоке Begin () и End () spritebatch - PullRequest
0 голосов
/ 28 апреля 2011

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

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

Ответы [ 2 ]

3 голосов
/ 28 апреля 2011

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

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

2 голосов
/ 28 апреля 2011

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

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

В качестве альтернативы вы можете использовать SpriteSortMode.Deferred, в этом случае первое, что вы рисуете, рисуется на фоне, второе, что вы рисуете, поверх этого и т. Д. ...

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

...