2014-12-06 40 views
0

我試着將AssetManager實現到我的項目中。現在我無法弄清楚我在AssetManager中做了什麼錯誤。我GOOGLE了,並嘗試了不同的東西。但似乎沒有人會用AssetManager遇到過這種問題。我使用.finisLoading(),但事後如果我問.isLoaded說,它尚未加載。libgdx AssetManager.finishLoading()不起作用

維基教程here 說這

manager.load( 「數據/ mytexture.png」,Texture.class);

....

manager.finishLoading();

...

紋理特= manager.get( 「數據/ mytexture.png」,Texture.class);

我有這樣的代碼

// fullFile e.g. "D:\\folder\\subfolder\\subsubfolder\\jpg.jpg" 

if (!new FileHandle(fullFile).exists()) { 
    System.err.printf("invalid file \"%s\"\n",fullFile); 
    System.exit(1); 
} 

if (!manager.isLoaded(fullFile,Texture.class)) manager.load(fullFile,Texture.class); 
manager.finishLoading(); 

if (!manager.isLoaded(fullFile,Texture.class)) { 
    return = new Sprite(new Texture("D:\\folder\\subfolder\\subsubfolder\\placeholder.jpg")); 
} else { 
    return new Sprite(manager.get(fullFile,Texture.class)); 
} 

馬槽是 AssetManager manager = new AssetManager(new FileHandleResolver() { @Override public FileHandle resolve(String fullFile) { FileHandle fh = new FileHandle(fullFile); if (!fh.exists()) { System.err.printf("invalid file \"%s\"\n",fh.path()); System.exit(1); } return fh; }

我到目前爲止已經試過

運行通過GDX-setup.jar創建的項目 - > Couldn 't加載文件:badlogic.jpg

代碼自:Juan Javier Cassani

public static void test() { 
AbsoluteFileHandleResolver fileHandleResolver = new AbsoluteFileHandleResolver(); 
AssetManager manager = new AssetManager(fileHandleResolver); 
//This could be anywhere else 
String fileName = "D:\\blablabla\\my_project\\core\\assets\\badlogic.jpg"; 

if (!new FileHandle(fileName).exists()) { 
    Gdx.app.error("Blub", "invalid file '" + fileName + "'"); 
    Gdx.app.exit(); 
} 

if (!manager.isLoaded(fileName, Texture.class)) 
    manager.load(fileName, Texture.class); 

manager.finishLoading(); 

if (manager.isLoaded(fileName, Texture.class)) 
    Gdx.app.log("Blub", "Texture loaded!"); 
else 
    Gdx.app.log("Blub", "Texture not loaded!"); 
} 

- > Blub:Texture not loaded!

Versions: 
java version "1.8.0_25" 
Java(TM) SE Runtime Environment (build 1.8.0_25-b18) 
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) 

ashley-1.3.1.jar 
box2dlights-1.3.jar 
gdx-1.4.1.jar 
gdx-ai-1.4.0.jar 
gdx-backend-lwjgl-1.4.1.jar 
gdx-box2d-1.4.1.jar 
gdx-box2d-platform-1.4.1-natives-desktop.jar 
gdx-bullet-1.4.1.jar 
gdx-bullet-platform-1.4.1-natives-desktop.jar 
gdx-controllers-1.4.1.jar 
gdx-controllers-desktop-1.4.1.jar 
gdx-controllers-platform-1.4.1-natives-desktop.jar 
gdx-freetype-1.4.1.jar 
gdx-freetype-platform-1.4.1-natives-desktop.jar 
gdx-platform-1.4.1-natives-desktop.jar 
gdx-tools-1.4.1.jar 
jinput-2.0.5.jar 
jinput-platform-2.0.5-natives-linux.jar 
jinput-platform-2.0.5-natives-osx.jar 
jinput-platform-2.0.5-natives-windows.jar 
jlayer-1.0.1-gdx.jar 
jorbis-0.0.17.jar 
jutils-1.0.0.jar 
lwjgl-2.9.1.jar 
lwjgl-platform-2.9.1-natives-linux.jar 
lwjgl-platform-2.9.1-natives-osx.jar 
lwjgl-platform-2.9.1-natives-windows.jar 
lwjgl_util-2.9.1.jar 

回答

0

我剛纔讀(再次)here,我不得不將工作目錄設置爲your_project_path/core/assets/。我不知何故在安裝後忘記了這一步。

但資產文件夾需要放平,no sub directories(在桌面上)。

0

我假設你使用絕對(完全)文件路徑(因爲在所提供的代碼它只是註釋),但AssetManager預計內部(使用的是默認的構造函數創建它,而不是指定一個FileHandleResolver)。我想你的代碼中使用

String fileName = "texture.jpg"; 

,並把一個texture.jpg文件/項目/安卓/資產/並能正常工作。只需將您的內部資產放在該文件夾中,將文件路徑更改爲內部文件即可。

編輯:

我真的覺得使用絕對路徑是不是一個好主意,因爲並不是所有的後端接受它,即使你只部署到桌面上,它使非感讓你的資產你的jar外面的位置是。無論如何,此代碼的工作對我來說,絕對路徑:

 AbsoluteFileHandleResolver fileHandleResolver = new AbsoluteFileHandleResolver(); 
     AssetManager manager = new AssetManager(fileHandleResolver); 
     //This could be anywhere else 
     String fileName = "/home/javier/texture.jpg"; 

     if (!new FileHandle(fileName).exists()) { 
      Gdx.app.error(TAG, "invalid file '" + fileName + "'"); 
      Gdx.app.exit(); 
     } 

     if (!manager.isLoaded(fileName, Texture.class)) 
      manager.load(fileName, Texture.class); 

     manager.finishLoading(); 

     if (manager.isLoaded(fileName, Texture.class)) 
      Gdx.app.log(TAG, "Texture loaded!"); 
     else 
      Gdx.app.log(TAG, "Texture not loaded!"); 
+0

我更改了我的Assetmanager,因此我接受完全限定的名稱。但同樣的問題仍然存在。它說它已經完成加載,並且不是。相對路徑從來沒有工作。 – GavriYashar 2014-12-06 08:43:06

+0

我很感謝您的幫助,但我猜AssetManager是被竊聽的,甚至沒有安裝程序生成的代碼運行。 – GavriYashar 2014-12-06 23:02:18