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