我一直在研究 AndEngine 并且正在开发一个使用 AndEngine GLES2 的应用程序,找不到与此问题相关的信息。
我应该为每组精灵使用单独的图集吗?
或者尝试将尽可能多的精灵打包到尽可能少的地图集上,相对于我希望地图集具有哪些选项等?
我一直在研究 AndEngine 并且正在开发一个使用 AndEngine GLES2 的应用程序,找不到与此问题相关的信息。
我应该为每组精灵使用单独的图集吗?
或者尝试将尽可能多的精灵打包到尽可能少的地图集上,相对于我希望地图集具有哪些选项等?
不是 AndEngine 特定的,但如果你想支持尽可能多的设备,你应该选择-
最多有 1024 x 1024 spritesheet/textureatlas。
确保您的 spritesheet 的宽度和高度是 2 的幂。(例如 64、128、256、512、1024 等)
尝试将属于一个场景/阶段的所有精灵打包到一个纹理图集中。这将有助于提高性能,因为在绘制/渲染期间从一种纹理切换到另一种纹理并不好。但是通常不可能将所有游戏精灵都打包在一个精灵表中,因为您有游戏精灵、游戏字体,可能还有一些视差图像等。在您的渲染调用中,首先绘制属于一个精灵表的所有精灵,然后移动到另一个。例如,如果您有字体图集、视差图集和游戏精灵图集;首先绘制视差,然后是游戏精灵,然后是字体。底线是最小化纹理切换。
如果您要使用多个纹理图集,例如一个用于背景图像,一个用于项目精灵,另一个用于玩家精灵,那么您不应该总是将它们设为 1024 x 1024。这会占用开销并且会减慢处理时间. 我还建议使用 a BuildableBitmapTextureAtlas
,因为这将防止纹理渗出。有了这些,您不必通过坐标将 TextureRegions 放置在图集上,它会为您处理。它可以这样实现:
BuildableBitmapTextureAtlas mBuildableBitmapTextureAtlas =
new BuildableBitmapTextureAtlas(this.mEngine.getTextureManager(), 128, 128);
然后你可以ITextureRegions
像这样添加你的:
// Notice, you do not have to supply x and y coordinates..it is handled for you :)
ITextureRegion mTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createFromAsset(this.mBuildableBitmapTextureAtlas,
this, "your_image.png");
然后你可以像这样添加ITextureRegion
到你的BuildableBitmapTextureAtlas
:
// You must use a try/catch statement to build this type of Bitmap texture atlas.
try {
// Use a BlackPawnTextureAtlasBuilder to prevent the texture from bleeding. We will add some padding.
this.mBuildableBitmapTextureAtlas.build(new BlackPawnTextureAtlasBuilder<IBitmapTextureAtlasSource, BitmapTextureAtlas>(0, 1, 1));
} catch (TextureAtlasBuilderException e) {
e.printStackTrace();
}
// Now that it is built, it can be loaded.
this.mBuildableBitmapTextureAtlas.load();
更多信息可以在这里找到