0

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

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

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

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

4

1 回答 1

1

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

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

AB

光盘

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

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

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

附加信息

为了提高性能,您应该使用:

  • 精灵池(更多:一般的对象池)(你永远不能显示超过 100 个 32x32 的精灵,因为它们中的一些很快就会离开屏幕)
  • SpriteBatch 用于不可更改/静态的相同 Sprite,SpriteGroup 用于其他(只要您知道可能有超过 5 到 10 个具有相同纹理的精灵,我从未测量过这些组是否比 REPEATING_NEAREST 选项更好或更差)
  • 每个精灵对象的 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

于 2013-07-08T03:01:24.380 回答