2016-07-05 2 views
1

LayeredAssetsBitmapTextureAtlasSource (여기에서 확인할 수 있습니다 : http://pastebin.com/vgfT1U5j)라는 클래스를 사용하고 있습니다. 현재 문자 조각으로 구성된 여러 개의 PNG 이미지를 하나의 아틀라스에 스태킹하고 있습니다. 그리고 부품에서 문자 스프라이트 만들기. 그 파트 (바지 등)를 제외한 모든 부분이 투명한 부분에 대한 스프라이트 시트가 있습니다. 캐릭터의 모든 부분에 여러 가지 색상의 스프라이트 시트를 만들었습니다 : 바지, 신발, 셔츠, 장갑, 머리, 모자, 검. LayeredAssetsBitmapTextureAtlasSource를 사용하면 동일한 아틀라스에이 둘을 샌드위치로 묶어서 하나의 AnimatedSprite를 만들 수 있습니다.AndEngine : 텍스처가 엔티티의 일부가되기 전에 텍스처의 색을 변경하는 방법

나는 프로세스를 재생성하여 새로운 아이템을 발견 할 때 캐릭터의 의상 색상을 업데이트합니다.

내가 지금하고 싶은 것은 그들이 아틀라스에 넣기 전에 프로그래밍 방식으로 부품의 색상을 변경하여 항목 다양성을 극대화 할 수 있지만 그다지 지출하지 않아도됩니다. 김프의 모든 것을 색칠하는 시간 ... 또한, PNG에 저장된 색조 톤을 사용하면 apk 크기가 크게 증가합니다. 나는 부품을 흰색으로하고 비행 중에 색칠하고 싶습니다.

전체 스프라이트를 채색하기 위해 Entity.setColor를 사용할 수 있지만 실제로 이것을 수행하는 재정의 된 메소드를 찾을 수 없습니다. 다른 곳에서 활용되는 색상 값을 설정하는 것처럼 보입니다. 따라서 리버스 엔지니어링은 지금까지 실패한 솔루션입니다.

셰이더가 내가 읽은 것으로부터 효과가 있을지 모르겠지만 잘못 될 수 있습니다. 이미지의 복사본을 만들어 컬러로 만들어야하고 그 복사본을 아틀라스에서 사용해야한다고 생각합니다. 그러나 어떻게 시작해야할지 모르겠습니다.

누구나 아이디어가 있습니까? 어떤 도움을 주셔서 미리 감사드립니다.

답변

0

알아 냈습니다. 대답은 캔버스에서 LayeredAssetsBitmapTextureAtlasSource의 Paint와 ColorFilter를 사용하는 것이 었습니다.

전체 클래스 파일의 경우

,

@Override 아래 공공 비트 맵 onLoadBitmap (최종 구성 pBitmapConfig) { 최종 비트 맵 이미지 = BitmapFromAsset (mContext를 찾습니다 관련 변경은 여기 http://pastebin.com/0wXUbLmk

보면, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + this.mBaseAssetPath); // mBaseAssetPath); if (image == null) 반환 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; 

}

관련 문제