Можно ли объединить несколько SpriteSortMode для SpriteBatch.Begin? - PullRequest
1 голос
/ 04 декабря 2010

Я хочу отсортировать спрайты по глубине слоя (то есть SpriteSortMode.BackToFront), но также отсортировать их по SpriteSortMode.Immediate (который, как я понимаю, является последним объектом, который рисуется поверх всех остальных).* Причина, по которой я хочу это поведение, заключается в том, что, если я рисую два спрайта на одной и той же глубине слоя, тот, который я нарисовал последним, оказывается сверху.Прямо сейчас это просто случайное, что визуализируется сверху, а что нет (я полагаю, что-то похожее на борьбу с z).

Я пробовал это:

  SpriteBatch.Begin(SpriteSortMode.Immediate|SpriteSortMode.BackToFront, BlendState.AlphaBlend);

Но это не такне работает ...

Ответы [ 2 ]

2 голосов
/ 04 декабря 2010

Не так, как ты это делаешь.SpriteSortMode - это не [Flags], поэтому вы не должны их объединять.

Одна простая идея для получения желаемого эффекта - добавить менее значимое смещение к глубине для каждогоспрайт ты рисуешь.Таким образом, для каждого розыгрыша вы должны написать:

spriteBatch.Draw(..., 0.5f + depthOffset);
depthOffset += 0.0001f;

И поэтому нарисованная глубина может закончиться примерно так:

0.5f  ->  0.5f
0.5f  ->  0.5001f
0.8f  ->  0.8002f
0.8f  ->  0.8003f
0.6f  ->  0.6004f
0.5f  ->  0.5005f

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

1 голос
/ 04 декабря 2010

Недавно у меня была похожая проблема в моей игре. Я решил, что это похоже на ответ Эндрю Рассела. Я думаю, что у меня есть смещение smaler (что-то вроде 0.0000001f). Я разрабатывал игру на основе плиток и добавил одно смещение для каждой единицы в y-измерении. Таким образом, спрайты, которые должны быть нарисованы позади, были нарисованы правильно.

...