私はしばらくの間、AndEngine を利用したライブ壁紙の重大なパフォーマンスの問題に取り組んできました (原因がまったくわからないうちに、別の質問を投稿しました)。これを適切に機能させるには、いくつかのスプライトをマージします。
私は、すべて同じサイズのかなり大きなスプライトを半ダースほど持っています。すべてが 1 つの画像のように見えるように、このようにしていますが、必要に応じてコードを介して各部分を異なる色に設定できます。なんらかの理由で、アルファをまったく利用するブレンディング モードを使用しているときにスプライトを重ねると (画像にアルファがなくても)、フレーム レートに大きなダメージを与えます。これ。
私が到達した解決策は、スプライトで必要なことを個別に行い、それらを 1 つにマージする必要があるということです。私はかなりの時間を AndEngine のさまざまなクラスに飛び込み、その過程で何も破壊しないように努めてきましたが、それを行う方法がわかりません。
あるスプライトを別のスプライトに平手打ちしたり、再加工したスプライトを何らかの形で一時的なテクスチャ アトラスに戻したりするのはそれほど難しいことではないと確信しています。
編集 ::
public void onLoadResources(){
this.mTestAtlas = new BitmapTextureAtlas(512, 1024, TextureOptions.NEAREST_PREMULTIPLYALPHA);
Bitmap b = BitmapFactory.decodeStream(layer1);
Bitmap a = overlay(b);
test = new BitmapTextureAtlasSource(a);
this.mTesting = BitmapTextureAtlasTextureRegionFactory.createFromSource(this.mTestAtlas, test, 0, 0);
this.getEngine().getTextureManager().loadTexture(this.mTestAtlas);
}
public Scene onLoadScene(){
layer1Sprite = new Sprite(x, y, width, height, this.mTesting);
scene.attachChild(layer1Sprite);
}
public static Bitmap overlay(Bitmap bmp1) {
Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
Canvas canvas = new Canvas(bmOverlay);
Paint layer1Paint = new Paint();
ColorFilter layer1Filter;
layer1Filter = new LightingColorFilter(Color.rgb(175, 0, 175), 1);
layer1Paint.setColorFilter(layer1Filter);
canvas.drawBitmap(bmp4, 0, 0, layer1Paint);
return bmOverlay;
}