SpriteBatch batch1 = new SpriteBatch( hoge );
SpriteBatch batch2 = new SpriteBatch( hoge );
batch1.Begin();
batch2.Begin();
batch1.Draw( 省略 );
batch2.Draw( 省略 );
batch1.End();
batch2.End();
実際使う場合には、まずは「batch1」でDrawしつつ、Drawした回数を数えておいて、
回数が一定数を超えたら「batch2」を使うようにする・・という仕組みにすればOKかと思います。
とはいえ速度的には、1個のSpriteBatchにまとめたほうが早いということだったので
できるだけ1個にまとめておきたいところですね。
SpriteBatch.BeginとEndの中でDrawを呼んでいるかと思いますが、マップチップを描画したりするときに、大量にSpriteを登録すると「OutOfMemoryException」が発生することがあります。
[スポンサードリンク]
SpriteBatchの内部では2000個として配列が確保されていたのですが、32*32のマップチップで960*544を埋めるだけで510個、マップチップの配置具合によっては10階層まで描画されるので510*10=5100個! ということでオーバーしてしまっていたようでした。
(そんなに描画するほうが悪いのですが、テストプログラムだったので・・・)
はて、どうしたものかと悩んでいたら、Nearealさん「SpriteBatchによる描画の並列化」という記事で「複数のSpriteBatchを用意して」という話がありました。
(実際は、複数のSpriteBatchを用意、並列化してパフォーマンス向上という高レベルなお話です・・)
なるほど、SpriteBatchを複数作ればよかったのかという結論になりました。
実装的にも簡単です。
[スポンサードリンク]
コメント
[スポンサードリンク]
関連記事
[スポンサードリンク]