0

これは私がやった方法です:

  1. 最小で textureAtlas を作成します。フィルター = Nearest および mag. フィルター = 最も近い。
  2. textureAtlas.findRegion() から TextureRegion を取得します。
  3. SpriteBatch を使用して画面に描画します。非常に単純ですが、大きな領域 (私の場合は 480x320) を描画すると、フレーム レートが非常に遅くなります。

通常、1 ~ 30 の領域を描画すると 30 fps になりますが、480x320 の大きな領域を 1 つだけ描画すると、わずか 20 fps になります。

4

3 に答える 3

4

これをエミュレーターで実行していますか?エミュレーターは、アプリケーションの実際のパフォーマンスの指標ではありません。実際のデバイスでテストします。

つまり、一般的な Android デバイスでは、約 1.6 ~ 2 倍の画面いっぱいに表示できます。もちろん、この数値は概算の数値であり、ブレンドが有効になっているかどうか (有効にすると悪化)、フィルタリング (近い、線形、より良い処理能力が必要になる)、テクスチャの色深度 (16 ビット) などの要因に影響されます。 RGB、32 ビット RGBA、高いほどより多くの帯域幅が必要になります)。

問題の一部ではありませんが、テクスチャの切り替えもできるだけ避ける必要があります。たとえば、これはアンチパターンになります。

batch.begin();
batch.draw(tex1, 0, 0);
batch.draw(tex2, 10, 30);
batch.draw(tex1, 40, 20);
....
batch.end();

これは、同じテクスチャの描画をグループ化するか、テクスチャ アトラスを使用することで解決できます。

于 2012-06-10T16:19:32.290 に答える
2

まだ読んでいない場合は、この記事が役に立つかもしれません。大きなテクスチャを描画するときのパフォーマンス特性について説明します。

于 2012-06-08T10:04:29.190 に答える
1

私の知る限り、多くの領域を描画するとき、描画コマンドの一部がレンダリングのために GPU に送信されますが、新しい描画コマンドをスプライトバッチに追加している間です。
これは、バッチのサイズに達したとき、新しいテクスチャがバインドされたとき、または flush() が呼び出されたときに発生します。
ドキュメンテーションを正しく理解していれば、この方法で CPU と GPU が互いに長時間待機する必要がなくなり、パフォーマンスが向上します。
ただし、フレームごとに大きな領域の描画コマンドが 1 つしかない場合、スプライトバッチはコマンドを部分的に GPU に送信できません。

本当にスプライトを 1 つだけ描画したい場合は、それをいくつかの領域に分割できます... (あなたが言ったように、10fps 以上
あります)。分割する必要はありません。

于 2012-06-08T12:27:41.450 に答える