【问题标题】:Graphics taking 0.5 GB memory in libgdx图形在 libgdx 中占用 0.5 GB 内存
【发布时间】:2020-03-31 18:04:55
【问题描述】:

我正在开发一个简单的 2D 游戏。我有多个精灵。每个精灵有大约 80 个 265* 256 的 png/帧。我使用 LibGdx 的纹理打包器来打包图集。我正在使用以下代码启用 mimap 到 pac

TexturePacker.Settings settings = new TexturePacker.Settings();
settings.combineSubdirectories = true;
settings.filterMin = Texture.TextureFilter.MipMapNearestLinear;
settings.filterMag = Texture.TextureFilter.Linear;

TexturePacker.process(settings, f.getPath(), outputFolderName, atlasFileName);

问题:

  1. 单个精灵 80 张图像/帧是否过多?
  2. 对于水果忍者这样的简单游戏来说,0.5 GB 的内存使用量是否过多?
  3. 如何减少内存使用量?
  4. 还有什么我应该尝试的吗?

更新1: 这是从android profiler截取的屏幕截图。

【问题讨论】:

    标签: android performance libgdx mipmaps texturepacker


    【解决方案1】:

    80 帧有点多,但这个数字在我的项目中从来都不是问题。也就是说,我们的 60 帧预渲染动画中的大多数都很小,就像 48x48 段中的图标闪烁图形,只有一张纸(因此上下文切换最少)。这对我们来说从来都不是性能问题......但是你说 256x256 让我有点害怕,特别是如果它没有裁剪并且创建了很多 png!

    虽然我的项目具有相似帧数的精灵,但它们已通过 Texture Packer 进行了优化。确保您将修剪模式设置为“修剪”并且它不是“无”(该设置靠近 Sprites 下的底部)。如果可能,此设置会将 256x256 去均质化为更小的部分,从而减少总表和纹理绑定的数量(我认为,以及更少的上下文切换).. 我不完全确定你是如何打包你的精灵或者是否它们甚至可以被修剪,但这可能会节省性能。

    让我给你举个例子:

    之前

    之后

    此外,如果您提供了有关如何创建动画的代码,我们可以仔细检查以确保您在只需要 1 个纹理时没有绑定 80 个纹理。我通过以下过程创建动画:

    TextureAtlas atlas = assetManager.get(atlas_name);
    Sprite[] spriteFrames = new Sprite[numFrames];
    
    for (int index=0; index<numFrames; index++) {
        if (atlas.findRegion(lookup_name, index) == null)
            Engine.console("[ERROR] problem loading and finding region for " + atlas_name + " " + lookup_name + " index: " + index + " not found in spritesheet .. fix immediately");
        else {
            spriteFrames[index] = atlas.createSprite(lookup_name, index);
        }
    }
    Animation<Sprite> animation = new Animation<Sprite>(timeBetweenFrames, spriteFrames);
    

    我希望这有助于提供一些见解。

    【讨论】:

    • 你的意思是在纹理包装器中修剪? //settings.stripWhitespaceX = true; //settings.stripWhitespaceY = true;对?我正在使用 libgdx 附带的纹理打包器。如果我设置这些带空白标志,那么我的动画就会出现故障。
    • 嗯,这就是你的答案。我没有使用该打包器的经验,我使用的是我链接的那个(它具有 libgdx 集成)。但是,是的,我怀疑设置与我所说的相同。如果您不去除空格,您实际上并没有优化您的工作表,并且会在渲染时进行大量上下文切换,文件大小也会受到伤害
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    相关资源
    最近更新 更多