2011-12-13 146 views
1

我一直在用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; 

} 

回答

1

Andengine不提供任何工具或方法來做到這一點,但幸運的是,原生的Android一樣。這裏有一篇文章展示瞭如何製作一個輸入兩個位圖但輸出一個合併位圖的函數。

http://www.jondev.net/articles/Combining_2_Images_in_Android_using_Canvas 有一個相關的問題在這裏: Android merge two images

更新Andengine GLES2:

截至2011年12月,有Andrengine的新版本,稱爲Andengine GLES2。它有一個內置的資源,用於將你的引擎精靈繪製成紋理。這裏是德發佈說明:

RenderToTexture /渲染紋理

用法:

渲染的東西到紋理,並使用紋理精靈。 (即有用的渲染當一些複雜的網格一次,然後再高效地繪製它作爲一個精靈。) 後處理效果

和鏈接到原來的論壇上發帖,概述補充GLES2。

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

+0

我試過沒有結果之前類似的東西,但是看着你給的鏈接和瀏覽四處找了幾個後,我設法得到它去。它似乎工作得很好,但我還有一個奇怪的問題。以這種方式創建的精靈在恢復時會從屏幕上消失,就像從其他應用程序中傳出或重新打開手機一樣。這對我來說似乎有點不可思議,但我確信這有一個簡單的理由。 – Shamrock

+0

我懷疑你的圖像正在被垃圾收集。將這些圖像寫入文件可能是一個好主意,以便在android殺死活動時可以恢復它們。也許發佈你的代碼? –

+0

我添加了我的設置的修剪版本。對不起,我的結構和命名非常糟糕,我打算在完成代碼時正確地修正代碼。我刪除了任何只是重複已有內容的東西(我正在合併多個圖像,因此需要「覆蓋」方法)。如果我錯過了應該包含的內容,我會很樂意將其發佈。它看起來對於垃圾回收是正確的,只是基於快速瀏覽。有沒有辦法告訴GC不要觸摸它,或者將它保存爲圖像是處理它的最佳方式? – Shamrock