libGDX循环加载文件夹中的所有图像到AssetManager中需要很长时间。

4

到目前为止,我一直通过以下方式将所有纹理加载到我的AssetManager类中 -

manager.load("images/image_1.png", Texture.class);

这一直在完美地工作,但我正在处理一个使用大量小图像的项目,并希望使用更通用的方式加载这些文件。我尝试过 -

FileHandle[] fileArray = Gdx.files.internal("images").list();
    for(int i=0; i<fileArray.length; i++){
        //if it is not a directory
        if(!(fileArray[i].isDirectory())){
                String stringPath = fileArray[i].path();
            //load file
                manager.load(stringPath, Texture.class);
        }
    }

这个方法可以运行,但是与之前的方法相比需要花费很长时间。首先为什么会这样?它所花费的时间是由于获取FileHandle实例列表吗?其次,有没有一种将目录中的所有图像作为纹理加载到资源管理器中,并且不需要长时间等待的方法?


3
使用 TextureAtlas!这是一个使用大量小图片的项目所需要的。 - noone
@noone 这应该是一个答案^^ 完美的解决方案!据我所知,它还将减少Texture绑定,从而提高性能。 - Robert P
1
谢谢,我会这样做。我以前从未使用过 Atlas,所以没有想到! - user2145312
1个回答

5

为了不让这个问题无解:

如果您有很多不同的图像,您应该使用TextureAtlas。要创建它们,您可以直接从代码中使用(请参见此维基文章),或使用这个(有点过时)GUI。

使用纹理集将一次性解决许多问题。

  1. 它将减少加载时间。
  2. 它将解决被强制使用 2 的幂大小(POT)纹理的问题。一个纹理集通常默认就是有效大小。
  3. 由于一次将几个图像打包成一个大纹理,总大小变小(内存消耗更少),因为您只需要将单个图像扩展到 POT 大小,而不是每个图像都这样做。
  4. 性能将提高,因为不需要太多的纹理绑定。您所做的就是绘制相同纹理的不同部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接