libGDX 在循环中将目录中的所有图像加载到 AssetManager 中,需要很长时间

use*_*312 4 java libgdx

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

manager.load("images/image_1.png", Texture.class);
Run Code Online (Sandbox Code Playgroud)

这一直工作得很好,但我正在开发一个使用大量小图像的项目,并且希望使用更通用的方式来加载这些文件。我努力了 -

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

noo*_*one 5

为了不让这个问题得不到解答:

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

使用图集可以一次性解决很多问题。

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