这是一个 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 中绘制的所有其他内容将始终绘制在此下方(因为它们是首先绘制的),因为此 SpriteBatch 的 .End() 始终是最后调用。
有什么解决办法吗?