AndEngine Слияние Спрайтов - PullRequest
       27

AndEngine Слияние Спрайтов

1 голос
/ 13 декабря 2011

Я какое-то время занимался серьезной проблемой производительности с живыми обоями на платформе AndEngine некоторое время назад (я задал еще один вопрос об этом некоторое время назад, прежде чем я вообще понял, что его вызывало), и кажется, чтоЕдинственный способ заставить это работать должным образом - это объединить несколько спрайтов.

У меня есть полдюжины или около того довольно больших спрайтов, все одинакового размера, которые наслоены прямо друг на друга.Я делаю это таким образом, чтобы все это выглядело как одно изображение, но каждая его часть может быть настроена на другой цвет с помощью кода в любое время.По тем или иным причинам наложение спрайтов при использовании режима наложения, в котором вообще используется альфа (даже если на изображениях не было альфы), наносит серьезный ущерб вашей частоте кадров, и я не могу найти какой-либо простой способ обойтиthis.

Решение, к которому я пришел, заключается в том, что мне нужно будет сделать то, что мне нужно, со спрайтами индивидуально, а затем объединить их в один.Я провел довольно много часов, погружаясь в различные классы 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 Ответ

1 голос
/ 19 декабря 2011

Andengine не предоставляет никаких инструментов или методов для этого, но, к счастью, родной Android делает. Вот статья, в которой показано, как создать функцию, которая вводит два растровых изображения, но выводит одно объединенное растровое изображение.

http://www.jondev.net/articles/Combining_2_Images_in_Android_using_Canvas Здесь есть связанный вопрос: Android объединяет два изображения

Обновление для Andengine GLES2:

Начиная с декабря 2011 года, появилась новая версия Andrengine под названием Andengine GLES2. Он имеет встроенный ресурс для рисования ваших спрайтов андегина в текстуры. Вот примечание к выпуску:

RenderToTexture / RenderTexture

Использование:

Визуализируйте что-нибудь в текстуру и используйте эту текстуру для спрайтов. (то есть полезно при рендеринге какой-то сложной сетки один раз, а затем снова эффективно рисовать ее как спрайт.) Эффекты постобработки

И ссылка на оригинальный пост на форуме с изложением дополнений к GLES2.

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

...