我已经用AndEngine动力动态壁纸解决了一段严重的性能问题了一段时间了(我之前已经发布了另一个关于它的问题,之前我知道是什么造成了它),而且似乎让这个正常工作的唯一方法是将几个精灵合并在一起。
我有六个左右的相当大的精灵,它们大小相同,可以直接叠放在一起。我这样做,所以它看起来像一个图像,但每当我喜欢时,它的每个部分都可以通过代码设置为不同的颜色。出于某种原因,在使用完全利用alpha的混合模式时分层精灵(即使图像中没有任何alpha)会对你的帧速率造成一些重大损害,我找不到任何简单的方法此
我得到的解决方案是,我需要单独使用精灵做我需要的东西,然后将它们合并为一个。我花了不少时间潜入各种类型的AndEngine,试图在这个过程中不要破坏任何东西,但我无法弄清楚如何去做。
我确信它不能 难以将一个sprite打到另一个sprite上,或者将重新编写的精灵放回到某个临时纹理图集中,我只是无法理解如何让它继续下去。
编辑::
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;
}
答案 0 :(得分:1)
Andengine没有提供任何工具或方法来做到这一点,但幸运的是,原生Android确实如此。这篇文章展示了如何创建一个输入两个位图但输出一个合并位图的函数。
http://www.jondev.net/articles/Combining_2_Images_in_Android_using_Canvas 这里有一个相关的问题: Android merge two images
Andengine GLES2的更新:
截至2011年12月,有一个名为Andengine GLES2的新版Andrengine。它有一个内置资源,用于将andengine sprite绘制到纹理中。这是发布说明:
<强> RenderToTexture /渲染纹理强>
<强>用法:强>
将某些内容渲染到纹理中并将该纹理用于Sprites。 (即在渲染一些复杂网格时有用,然后再次有效地将其作为精灵绘制。) 后处理效果
原始论坛帖子的链接概述了GLES2的补充。
http://www.andengine.org/forums/announces/andengine-gles2-pre-release-on-december-23rd-t6097.html