0

タイルベースの 2D ゲームを開発しています。skybackground、landbackground、town、UI などのコンポーネントに分割し、各コンポーネントが描画を処理します。描画呼び出しを呼び出す前にspritebatch.Begin()、デフォルト値を使用して、すべてを 1 つのバッチで描画します。

土地の塊を描くために、私はそれがいっぱいになるまで、その領域全体に正方形の土地テクスチャを繰り返し描きます。ただし、まさにそれを行うというspriteBatchモードがあります。linear wrap欠点は、1 つのグローバルspritebatch.begin()を各コンポーネントに何度も分割して設計を変更する必要があることです。

begin()だから私の質問は、テクスチャを手動でタイリングするか、サブコンポーネント間で分割するか、どちらがより良い/より経済的かということend()です?

単一の を分割する必要がある他の問題もありspriteBatch.Begin()ますspriteBatch.Begin()。またはさらに10?それとも100以上?さらに追加することを心配するには、どの規模から始めればよいか知りたいbegins()です。

4

1 に答える 1

1

最善の解決策は、CPU ではなく GPU でできるだけ多くの作業を行い (たとえば、タイリングなどを利用して)、SpriteBatch.Begin() 呼び出しをできるだけ少なくすることです...

ここでの最適な解決策は、どちらの極端にも行かないことです。

2 つの SpriteBatch を用意して、土地に使用し、もう 1 つを他のすべてに使用しないのはなぜですか?

たとえば、次のようにソリューションを再構築します。

  • 両方の SpriteBatches がすべてのコンポーネントに渡され、どちらを使用するかをコンポーネントに決定させますか? ...また...

  • 各コンポーネントには、必要な SpriteBatch を示すプロパティがあり、描画時に適切なものを渡しますか?

各 SpriteBatch.Begin() の影響については、特定のゲーム (および前の spriteBatch を完了して次の spriteBatch を開始するために発生する必要がある作業の量) に大きく依存するため、パフォーマンスを継続的にテストおよび監視することをお勧めします。いつケアする必要があるかを判断するための最良の方法。

于 2011-09-25T23:27:01.253 に答える