【发布时间】:2017-03-07 18:37:19
【问题描述】:
我正在用 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);
}
资产.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?我在开发的早期没有遇到这个问题。感谢您提供任何和所有帮助,谢谢!
【问题讨论】:
-
在
render()方法第一次返回之前,您必须做一些耗时的事情。在这里看不到足够的代码来确定是什么。 FileUtils 是来自 Apache Commons,还是你自己的类? -
@Tenfour04 感谢您检查我的代码,抱歉回复延迟。我继续添加 FileUtils 类供您查看。渲染类是 LoadingState.java 部分中显示的内容,我认为不会运行任何耗时的操作,因为如果是这种情况,它也会在桌面上显示黑屏。在当前状态下,黑屏仅出现在 android 而不是桌面上。感谢任何帮助
标签: java libgdx loading file-management