我一直在用AndEngine驅動的動態壁紙解決一個嚴重的性能問題(我已經發布了另一個關於它的問題,在我知道是什麼造成了它之前)和它似乎讓這個正常工作的唯一方法是將幾個精靈合併在一起。AndEngine合併精靈
我有半打左右的相當大的精靈,都是相同的大小,直接層疊在一起。我這樣做是因爲它看起來像一個圖像,但是每當我想要時,它的每個部分都可以通過代碼設置爲不同的顏色。出於某種原因,在使用混合模式(根本不使用圖像中的任何alpha)時使用混合模式分層精靈會對幀速率造成一些重大損害,而且我找不到任何簡單的方法這個。
我到達的解決方案是我需要做我需要的個別精靈,然後將它們合併爲一個。我已經花了好幾個小時潛入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;
}
我試過沒有結果之前類似的東西,但是看着你給的鏈接和瀏覽四處找了幾個後,我設法得到它去。它似乎工作得很好,但我還有一個奇怪的問題。以這種方式創建的精靈在恢復時會從屏幕上消失,就像從其他應用程序中傳出或重新打開手機一樣。這對我來說似乎有點不可思議,但我確信這有一個簡單的理由。 – Shamrock
我懷疑你的圖像正在被垃圾收集。將這些圖像寫入文件可能是一個好主意,以便在android殺死活動時可以恢復它們。也許發佈你的代碼? –
我添加了我的設置的修剪版本。對不起,我的結構和命名非常糟糕,我打算在完成代碼時正確地修正代碼。我刪除了任何只是重複已有內容的東西(我正在合併多個圖像,因此需要「覆蓋」方法)。如果我錯過了應該包含的內容,我會很樂意將其發佈。它看起來對於垃圾回收是正確的,只是基於快速瀏覽。有沒有辦法告訴GC不要觸摸它,或者將它保存爲圖像是處理它的最佳方式? – Shamrock