如何从Andengine中的多个小TextureRegions创建一个大的TextureRegion?

时间:2013-06-22 23:17:12

标签: android textures andengine sprite

我正在使用Andengine创建一个2D跑步游戏,我的平台是由具有不同纹理区域的多个32x32精灵创建的。我希望能够创建不同大小的平台,因此我无法从单个图像文件创建平台。

因此,如果平台很大,我的每个平台都会从少数精灵创建到数百个精灵。这显然会降低我的游戏性能。这就是为什么我试图找到一种方法从我使用的小瓷砖创建一个大的TextureRegion创建我的平台,所以我将能够创建更少的精灵。

我希望能够创建一个并不总是具有相同大小的平台的TextureRegion,或者创建整个舞台的TextureRegion(由多个平台组成)。

如何以有效的方式将TextureRegions粘贴在一起?

1 个答案:

答案 0 :(得分:1)

据我所知,textureRegions,它们只是给定地图集(包含记忆图像)的某种参考。增加纹理区域的大小无助于减少内存消耗,相反,您只会增加从地图集中看到的剪切/剪裁

例如,让你的图像看起来像这样(纹理区域A,B,C,D):

AB

CD

将纹理区域的宽度和高度加倍会导致一个大的纹理区域包含A B C和D的纹理(这可能不是您想要的)

如果您的平台只包含一个纹理区域A,则可以将其作为单个png加载到新的图集中,并在构造函数中添加TextureOptions.REPEATING_NEARIST_PREMULTIPLYALPHA。然后你可以将纹理区域的宽度和高度设置为精灵所需的宽度和高度,地图集将重复它 - 如果你使用它将被绘制为AAAAA

textureRegionHeight = imageHeight; 
textureRegionWidth = 5* imageWidth;
spriteWidth = textureRegionHeight;
spriteHeight = textureRegionHeight;

其他信息

要提高性能,您应该使用:

  • Sprite pooling(更多:一般的对象池)(你永远不会再显示超过100个32x32精灵,因为其中一些精灵很快会出现在屏幕外)
  • SpriteBatch用于不可更改/静态相同的Sprite,SpriteGroup用于其他SpriteGroup(一旦你知道可能有超过5到10个具有相同纹理的sprite,我从未测量过这些组是否比REPEATING_NEAREST选项更好或更差)< / LI>
  • Sprite.setCullingEnabled(true)为每个精灵对象,因为它将停止绘制不可见/在屏幕外的精灵(我既不测量剔除是否适用于REPEATING_NEAREST)

这些要点应该提高绩效

可在http://www.matim-dev.com/tips-and-tricks---how-to-improve-performance.html或AndEngine论坛http://www.andengine.org/forums/search.php找到更多信息