Это вопрос XNA ...
У меня есть большое количество объектов DrawableGameComponents в моей игре, и все они используют один и тот же SpriteBatch. Однако мне приходится каждый раз вызывать SpriteBatch.Begin () и .End () для рисования каждого компонента. Я хочу нарисовать все в одном пакете для повышения производительности, но я не знаю, куда могут пойти .Begin () и .End (), так как .Draw () вызывается автоматически (так как они DrawableGameComponents)
Кто-нибудь знает, что я могу сделать, чтобы они все рисовались между одним вызовом .Begin () и .End (), сохраняя их как DrawableGameComponents?
Edit:
Хорошо с этого сайта http://www.progware.org/Blog/post/XNA-Game-Development-(Decentralize).aspx Я подумал, что он вызывается в вызове основного игрового цикла. Вызовraw () ... так что я могу просто обернуть это с помощью методов 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 всегда будет называться последним.
Есть какое-нибудь решение для этого?