2011-12-13 3 views
1

AndEngine이 구동되는 라이브 벽지에서 잠시 동안 심각한 성능 문제를 다루었습니다. (어떤 문제가 발생했는지 알지 못하기 전에 잠시 후 다른 질문을 게시했습니다. 제대로 작동하도록하는 유일한 방법은 몇 가지 스프라이트를 병합하는 것입니다.AndEngine 병합 Sprites

나는 똑같은 크기의 6 개 정도의 큰 스프라이트를 서로의 위에 직접 쌓아 올렸습니다. 이렇게하면 모든 것이 하나의 이미지처럼 보이지만 원하는 부분을 코드를 통해 각 부분을 다른 색상으로 설정할 수 있습니다. 어떤 이유에서든 알파를 전혀 사용하지 않는 블렌딩 모드를 사용할 때 스프라이트를 레이어하는 것은 (이미지에 알파가 없더라도) 프레임 속도에 큰 손상을 주며 주변에서 간단한 방법을 찾을 수 없습니다. 이.

내가 도달 한 해결책은 필자가 스프라이트를 개별적으로 필요로하는 것을 수행하고, 이들을 하나로 통합해야한다는 것이다. 나는 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 다행히 어떤 도구 나이 작업을 수행하는 방법,하지만를 제공하지 않습니다, 기본 안드로이드는 않습니다. 다음은 두 비트 맵을 입력하지만 하나를 병합 한 비트 맵을 출력하는 함수를 만드는 방법을 보여주는 기사입니다.

http://www.jondev.net/articles/Combining_2_Images_in_Android_using_Canvas 여기에 관련된 질문이있다 : Andengine GLES2에 대한 Android merge two images

업데이트 : 2011 년 12 월 AS

는 Andengine GLES2라는 Andrengine의 새로운 버전이 있습니다. 그것은 당신의 andengine 스프라이트를 텍스처로 그리기위한 리소스를 내장하고 있습니다. 여기 TEH 릴리스 노트는 다음과 같습니다

RenderToTexture/RenderTexture

사용법 :

것은 텍스처에 뭔가를 렌더링 및 스프라이트 동안 그 질감을 사용합니다. (즉 유용한 스프라이트로 다시 드로잉 효율적 한번 그리고 일부 복잡한 메쉬를 렌더링 할 때). 후 처리 효과

그리고 GLES2에 추가 윤곽 일본어 포럼 포스트 링크.

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

+0

나는 어떤 결과 전에 비슷한 시도했다, 그러나 당신이 준 링크보고 몇을 찾기 위해 주위를 검색 후, 나는 가야 관리했다. 실제로는 훌륭하게 작동하는 것처럼 보이지만 아직 이상한 문제가 있습니다. 이러한 방식으로 생성 된 스프라이트는 다른 앱에서 가져 오거나 휴대 전화를 다시 켜는 것처럼 다시 시작할 때 화면에서 사라집니다.그것은 나에게 조금 이상한 것 같지만, 나는 그것에 대한 간단한 이유가 있다고 확신한다. – Shamrock

+0

귀하의 이미지가 가비지 수집 된 것으로 의심됩니다. 안드로이드가 활동을 죽이면 이미지를 복원 할 수 있도록 파일에 이미지를 작성하는 것이 좋습니다. 어쩌면 코드를 게시할까요? –

+0

내 설정이 다듬어 진 버전을 추가했습니다. 아주 가난한 구조와 명명법에 대해 유감스럽게 생각합니다.이 코드를 정리할 때 적절한 코드를 수정하려고합니다. 나는 이미 그곳에있는 것의 반복 된 것들을 제거했다. (나는 다중 이미지를 결합하고있다. 따라서 "오버레이"방법의 필요성). 내가 포함되어 있어야만하는 것을 놓친 경우 나는 그것을 게시하게되어 기쁩니다. 가비지 콜렉션이라는 것이 옳은 것 같습니다. GC에 손대지 말라고 지시하는 방법이 있을까요 아니면 그것을 처리하는 가장 좋은 방법은 이미지로 저장하는 것일까 요? – Shamrock