これはXNAの質問です...
ゲームにDrawableGameComponentsであるオブジェクトが多数あり、それらはすべて同じSpriteBatchを共有しています。ただし、各コンポーネントを描画するには、毎回SpriteBatch.Begin()と.End()を呼び出す必要があります。パフォーマンスを向上させるためにすべてを1つのバッチで描画したいのですが、.Draw()が自動的に呼び出されるため(DrawableGameComponentsであるため)、.Begin()と.End()がどこに移動できるかわかりません。
それらをDrawableGameComponentsとして保持しながら、それらすべてを単一の.Begin()呼び出しと.End()呼び出しの間に描画させるために私ができることを誰かが知っていますか?
編集:
このWebサイトから申し分なく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()が常に最後に呼ばれます。
これに対する解決策はありますか?