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

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

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

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

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

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

RenderToTexture / RenderTexture

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

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

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

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

Другие вопросы по тегам