Я бы хотел, чтобы некоторые 2D-спрайты перекрывали некоторые 3D DrawableGameComponents. Для упрощенного примера, меню паузы (реализованное в виде 2D-спрайта) должно быть нарисовано поверх приостановленного космического корабля (реализовано как компонент 3D-игры).
Платформа XNA автоматически вызывает методы Draw классов из Microsoft.Xna.Framework.Game и Microsoft.Xna.Framework.DrawableGameComponent.
По своему опыту, я обнаружил, что порядок розыгрыша:
- Методы игры Draw ()
- DrawableGameComponent Draw () методы
Мои вызовы метода рисования spriteBatch - это метод рисования моего класса Game. Поэтому космический корабль рисуется поверх меню паузы (делая его нечитаемым).
Мне кажется, что самым простым способом решения моей проблемы было бы изменить порядок вызова методов рисования. Это возможно?
Я пытался установить DrawOrder для DrawableGameComponents на разные значения (1000, 1, 0, -1, -1000), но это не влияет на порядок вызова метода Draw () каркаса XNA между экземплярами Game и DrawableGameComponent.
Я рассмотрел layerDepth вызовов метода SpriteBatch Draw, но, похоже, они не связаны с порядком рисования XNA Framework между классами Game и DrawableGameComponent. Глубина слоя влияет только на спрайты в SpriteBatch.
Я новичок в использовании XNA, но подозреваю, что слишком много прошу об этом. Если это так, каким был бы нормальный способ добиться размещения 2D-объектов поверх 3D-объектов?
Буду признателен за любую помощь.