1

私はしばらくの間、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;

}
4

1 に答える 1

1

Andengine はこれを行うためのツールや方法を提供していませんが、幸いなことに、ネイティブの Android は提供しています。これは、2 つのビットマップを入力して 1 つのマージされたビットマップを出力する関数を作成する方法を示す記事です。

http://www.jondev.net/articles/Combining_2_Images_in_Android_using_Canvas ここに関連する質問があります: Android は 2 つの画像をマージします

Andengine GLES2 の更新:

2011 年 12 月現在、Andrengine GLES2 と呼ばれる Andrengine の新しいバージョンがあります。andengine スプライトをテクスチャに描画するためのリソースが組み込まれています。リリースノートは次のとおりです。

RenderToTexture/RenderTexture

使用法:

何かをテクスチャにレンダリングし、そのテクスチャをスプライトに使用します。(つまり、複雑なメッシュを一度レンダリングしてから、スプライトとして効率的に再描画する場合に便利です。)

また、GLES2 への追加の概要を説明している元のフォーラム投稿へのリンク。

http://www.andengine.org/forums/announces/andengine-gles2-pre-release-on-december-23rd-t6097.html

于 2011-12-19T19:37:49.447 に答える