1

我一直在研究 AndEngine 并且正在开发一个使用 AndEngine GLES2 的应用程序,找不到与此问题相关的信息。

我应该为每组精灵使用单独的图集吗?

或者尝试将尽可能多的精灵打包到尽可能少的地图集上,相对于我希望地图集具有哪些选项等?

4

2 回答 2

4

不是 AndEngine 特定的,但如果你想支持尽可能多的设备,你应该选择-

  1. 最多有 1024 x 1024 spritesheet/textureatlas。

  2. 确保您的 spritesheet 的宽度和高度是 2 的幂。(例如 64、128、256、512、1024 等)

  3. 尝试将属于一个场景/阶段的所有精灵打包到一个纹理图集中。这将有助于提高性能,因为在绘制/渲染期间从一种纹理切换到另一种纹理并不好。但是通常不可能将所有游戏精灵都打包在一个精灵表中,因为您有游戏精灵、游戏字体,可能还有一些视差图像等。在您的渲染调用中,首先绘制属于一个精灵表的所有精灵,然后移动到另一个。例如,如果您有字体图集、视差图集和游戏精灵图集;首先绘制视差,然后是游戏精灵,然后是字体。底线是最小化纹理切换。

于 2013-06-07T13:49:14.817 回答
0

如果您要使用多个纹理图集,例如一个用于背景图像,一个用于项目精灵,另一个用于玩家精灵,那么您不应该总是将它们设为 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();

更多信息可以在这里找到

于 2013-06-07T14:39:16.633 回答