Можно ли рисовать XNA DrawableGameComponents перед вызовами рисования SpriteBatch, чтобы спрайты рисовались поверх DrawableGameComponents? - PullRequest
1 голос
/ 11 июля 2010

Я бы хотел, чтобы некоторые 2D-спрайты перекрывали некоторые 3D DrawableGameComponents. Для упрощенного примера, меню паузы (реализованное в виде 2D-спрайта) должно быть нарисовано поверх приостановленного космического корабля (реализовано как компонент 3D-игры).

Платформа XNA автоматически вызывает методы Draw классов из Microsoft.Xna.Framework.Game и Microsoft.Xna.Framework.DrawableGameComponent.

По своему опыту, я обнаружил, что порядок розыгрыша:

  1. Методы игры Draw ()
  2. 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-объектов?

Буду признателен за любую помощь.

1 Ответ

3 голосов
/ 11 июля 2010

Прошло некоторое время с тех пор, как я использовал XNA, но я верю, что вызов base.Draw() в методе Draw() вашего класса Game будет повторять ваш DrawableGameComponents, поэтому вы можете попытаться выполнить этот вызов до того, как или после логики рисования в вашем методе Draw в зависимости от того, в каком порядке вы хотите, чтобы происходили вызовы.

...