我正在 LibGDX/Java 中创建一个游戏。当游戏启动时,它会加载“assets”文件夹中的所有资源。在此之前,它会加载一个图像,以在加载资源时用作加载图像。这在桌面上工作得很好,但在 Android 上启动时,在绘制加载图像和开始加载资源之前,黑屏将显示大约 30 秒。
我当前的代码如下:
LoadingState.java:
public void render(SpriteBatch batch) {
if (!loadedBg) {
GameManager.getInstance().assetManager.finishLoadingAsset("gui/constant/menuBg.png");
loadedBg = true;
}
Texture background = gameManager.assetManager.get("gui/constant/menuBg.png", Texture.class); // Set background image
/* Drawing */
batch.draw(background, 0, 0);
}
Assets .java:
/** Loads all assets from the asset directories */
public void load() {
List<FileHandle> allFiles = new ArrayList<FileHandle>(); // This will contain all the files in all the subdirectories.
for(FileHandle dir : assetDirs) {
allFiles.addAll(FileUtils.listf(dir.path()));
}
for(int i = 0; i < allFiles.size(); i++) {
if(allFiles.get(i).name().startsWith("._")) {
allFiles.remove(i);
}
}
/* Iterate through all the files and load only the png ones */
for(FileHandle f : allFiles) {
if(f.name().endsWith(".png")) { // Found an image file; load it as a texture
manager.load(f.path(), Texture.class);
}
}
}
编辑: 添加了 FileUtils 类 FileUtils.java:
/** Returns all files from a directory */
public static List<FileHandle> listf(String directoryName) {
FileHandle directory = Gdx.files.internal(directoryName);
List<FileHandle> resultList = new ArrayList<FileHandle>();
// Get all the files from a directory
FileHandle[] fList = directory.list();
resultList.addAll(Arrays.asList(fList));
for (FileHandle file : fList) {
if (file.isDirectory()) {
resultList.addAll(listf(file.path()));
}
}
return resultList;
}
这是 Android 应用程序整体的问题吗?还是只有 LibGDX?我在开发早期并没有遇到这个问题。感谢您的任何帮助,谢谢!
最佳答案
我最好的猜测是,在 Android 上调用目录上的 list()
非常慢,因为它从压缩的 apk ( see here ) 中读取文件,因此如果您的 Assets 目录子目录非常多,很耗费时间。
简单的解决方案是在 render()
方法返回一次(大概已经绘制了加载屏幕)之前不要调用您的 listf()
方法。但这并不能解决不必要的 30 秒等待问题。
由于 Assets 文件夹中的文件在编译之前是已知的,因此我建议编写一个脚本来扫描 Assets 文件夹并创建一个列出所有路径的文本文件。您可以将此文件放在 Assets 目录的根目录中,并在 listf
方法中读取它,以快速获取文件路径列表。 Here's an example script.在开发过程中,您可以将此脚本设置为在运行桌面版本时自动运行。
关于Java LibGDX - 在加载屏幕之前黑屏出现很长一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42655790/