Я какое-то время занимался серьезной проблемой производительности с живыми обоями на платформе 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;
}