gpt4 book ai didi

Java LibGDX - 在加载屏幕之前黑屏出现很长一段时间

转载 作者:行者123 更新时间:2023-12-02 13:42:37 25 4
gpt4 key购买 nike

我正在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com