2016-07-05 67 views
1

使用一個名爲LayeredAssetsBitmapTextureAtlasSource的類(你可以看看這裏:http://pastebin.com/vgfT1U5j)我目前正在堆疊多個PNG圖像組成的角色塊成一個圖集並從零件中製作角色精靈。對於那些除了那個部分(例如褲子)以外的所有部分都是透明的,我有我的精靈表。我爲角色的所有部分製作了多個不同顏色的spritesheet:褲子,鞋子,襯衫,手套,頭部,帽子,劍。 LayeredAssetsBitmapTextureAtlasSource可以讓我將它們夾在一起放入相同的地圖集中,並從中製作一個AnimatedSprite。AndEngine:我如何改變紋理的顏色之前,它是一個實體的一部分

我更新了角色服裝的顏色,因爲通過重新創建過程找到了新物品。

我現在想要做的就是在編程前將這些部件的顏色改變爲圖集之前的顏色,這樣我的物品多樣性就可以上升,但我不必花那麼多錢在GIMP中對所有東西進行着色......另外,在PNG中保存了大量的顏色變化,大大增加了我的apk大小。我想用白色做這些部分,並且在飛行中對它們進行着色。

我能夠使用Entity.setColor着色整個精靈,但我似乎無法找到實際完成此操作的重寫方法。它看起來只是設置了其他地方使用的顏色值。因此,逆向工程解決方案迄今爲止失敗了。

我不確定着色器會從我讀過的內容中工作,但我可能是錯的。我相信我需要複製圖像並着色,然後在圖集中使用該副本,但我不知道如何開始這樣做。

任何人有任何想法?在此先感謝您的幫助

回答

0

想出來......答案是在LayeredAssetsBitmapTextureAtlasSource的Canvas上使用Paint和ColorFilter。

對於整個類文件,看看這裏http://pastebin.com/0wXUbLmk

對於相關的變化,看看下面

@覆蓋 公共位圖onLoadBitmap(最終配置pBitmapConfig) { 最終圖圖像= BitmapFromAsset(mContext, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath()+ this.mBaseAssetPath); // mBaseAssetPath); if(image == null) return null;

final Bitmap bitmap = Bitmap.createBitmap(mTextureWidth, mTextureHeight, Bitmap.Config.ARGB_8888); 
    final Canvas canvas = new Canvas(bitmap); 
    canvas.drawBitmap(image, 0f, 0f, null); 
    for (int i = 0; i < mAssetLayers.size(); i++) 
    { 
     Paint p = new Paint(); 
     int color = Color.rgb(100,100,2); 
     ColorFilter filter = new LightingColorFilter(color, 0); 
     p.setColorFilter(filter); 


    final AssetLayer al = mAssetLayers.get(i); 
    final Bitmap layer = BitmapFromAsset(mContext, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + al.mAssetPath); 
    canvas.drawBitmap(layer, al.mXOffset, al.mYOffset, p); 
    } 
    return bitmap; 

}