我創造LibGDX/Java中的比賽之前。遊戲啓動時,它會加載「資產」文件夾中的所有資產。在執行此操作之前,它會在資產加載時加載圖像以用作加載圖像。這在桌面上運行得非常好,但在Android上啓動時,在加載圖像繪製並開始加載資源之前,黑屏將顯示約30秒。的Java LibGDX - 黑色屏幕出現一個愚蠢的長週期加載屏幕
我當前的代碼如下:
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.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()方法的第一次返回之前,你必須做一些耗時的工作。在這裏看不到足夠的代碼來確定什麼。是Apache Commons的FileUtils,還是你自己的類? – Tenfour04
@ Tenfour04感謝您檢查我的代碼,對於延遲迴復感到抱歉。我繼續前進,並添加了FileUtils類供您檢查。渲染類是在LoadingState.java部分顯示的內容,我不相信任何耗時的事情正在運行,因爲如果是這種情況,它也會在桌面上顯示黑屏。在目前的狀態下,黑屏只出現在android而不是桌面上。感謝任何幫助 – Flizzet