Это вопрос XNA...
У меня есть большое количество объектов DrawableGameComponents в моей игре, и все они используют один и тот же SpriteBatch. Однако мне приходится каждый раз вызывать SpriteBatch.Begin() и .End() для отрисовки каждого компонента. Я хочу рисовать все одним пакетом для повышения производительности, но я не знаю, куда могут пойти .Begin() и .End(), поскольку .Draw() вызывается автоматически (поскольку они являются DrawableGameComponents)
Кто-нибудь знает, что я могу сделать, чтобы все они были нарисованы между одним вызовом .Begin() и .End(), сохраняя при этом их как DrawableGameComponents?
Редактировать:
Хорошо с этого веб-сайта http://www.progware.org/Blog/post/XNA-Game-Development-(Decentralize).aspx Я полагал, что он вызывается при вызове base.Draw() основного игрового цикла... поэтому я могу просто обернуть его с помощью Begin и End методы
protected override void Draw(GameTime gameTime) {
if (Cell.Cell.CellSpriteBatch != null) {
Cell.Cell.CellSpriteBatch.Begin(
SpriteSortMode.BackToFront, BlendState.AlphaBlend,
SamplerState.AnisotropicClamp, null, null, null,
gamePlay.Camera.GetTransformation()
);
}
base.Draw(gameTime);
if (Cell.Cell.CellSpriteBatch != null) {
Cell.Cell.CellSpriteBatch.End();
}
}
и это работает сейчас, но выполнение этого таким образом, по-видимому, означает, что все остальное, что я хочу нарисовать в другом SpriteBatch, всегда будет отображаться ниже этого (поскольку они рисуются первыми), потому что .End() этого SpriteBatch всегда будет позвонил последним.
Любое решение для этого?