1

私はAndEngineでゲームを書いており、そこで数十個のスプライトを 1 つのSpriteBatchに入れています。これを行う必要があります。そうしないと、すべてのスプライトを単独で描画するときにフレーム レートが大幅に低下します。私の質問は、完全なSpriteBatchの色を変更するにはどうすればよいですか?

これがSpriteBatchの作成方法です。

ArrayList<Sprite> dozenSprites; // these are all the sprites of one SpriteBatch in a list
SpriteBatch spriteBatch = new SpriteBatch(spriteBatchTextureAtlas, dozenSprites.size(),vertexBufferObjectManager);

for (Sprite sprite : dozenSprites) {
        spriteBatch.draw(sprite);
}
spriteBatch.submit();

まあ、それについて特別なことは何もありません。すべての準備が整ったら、SpriteBatchをシーンにアタッチすると、想定どおりに表示されます。ただし、呼び出してspriteBatch.setColor(0.5f,0.5f,0.5f);も何も起こりません。色は、 SpriteBatchを描画する前に、すべてのスプライトに setColor(...) を設定した場合にのみ変更さ れます。別の方法はありますか?

少しでもヒントをいただければ幸いです。ありがとうございました。

編集: 私の解決策
Cameron FredmansSpriteBatch classが示唆したように (ありがとうございます!) 私は最初に直接拡張してsetColor()メソッドを実装しようとしました。しかし、方法がわからなかったので、クイックでダーティなバリアントを選択しました。

 // initialize the SpriteBatch as above
 // and to change the color call:
 spriteBatch.reset();
 for (Sprite sprite : dozenSprites) {
        sprite.setColor( theNewColor );
        spriteBatch.draw(sprite);
 }
 spriteBatch.submit();

spriteBatch を使用するとパフォーマンスが大幅に向上するため、元のすべてのスプライトを ArrayList に保持し、毎回バッチを再初期化するだけでも十分に高速です。しかしもちろん、誰かが SpriteBatch クラスの拡張に成功したら、私は非常に興味があります! :)

4

1 に答える 1

2

SpriteBatch には setColor() がありますが、これは実際には Shape を拡張した結果にすぎません。考えられる解決策は次の 2 つです。

(1) 各スプライトを個別に色付けします。

ArrayList<Sprite> dozenSprites; // these are all the sprites of one SpriteBatch in a list
SpriteBatch spriteBatch = new SpriteBatch(spriteBatchTextureAtlas, dozenSprites.size(),vertexBufferObjectManager);

for (Sprite sprite : dozenSprites) {
        sprite.setColor(.5f, .5f, .5f);
        spriteBatch.draw(sprite);
}
spriteBatch.submit();       

(2) AndEngine の SpriteBatch を修正する

どうしても各スプライトに色を付けたくない場合は、AndEngine の SpriteBatch クラスを変更して、setColor() をオーバーライドするメソッドを追加してみてはどうでしょうか。スプライト バッチにカラー フィールドを追加し、setcolor でそのフィールドを調整してから、draw メソッドで、スプライト バッチが描画しているスプライトの色を保存されているカラー フィールドに設定します。

AndEngine できれいに実装すれば、ソースの可能な変更として提出することもできます。(オープンソースです。参加するのは楽しいです。)

于 2013-02-25T17:07:42.697 に答える