2015-04-03 98 views
2

Okey Im只是在libgdx中與AssetManager一起掙扎。我跟着每一個教程,閱讀每一個wikipage,但我不能得到它的工作。Libgdx:AssetManager未加載資產

資產類別:

public class Assets { 

private static final AssetManager manager = new AssetManager(); 
public static final String background = "data/lawn.png"; 
public static void load() { 

    manager.load(background, Texture.class); 

} 
public static void dispose()  { 
    manager.dispose(); 
} 

public static boolean update() { 
    return manager.update(); 
} 

主要類:

public class TombStone extends Game implements Screen { 
@Override 
public void create() { 

    Assets.manager.update(); 



} 

,我打電話給我的紋理像這樣的屏幕類:

public class StoneScreen implements Screen{ 
public Texture texture; 
public StoneScreen(TombStone gam){ 
loadStandard(); 
} 
public void loadStandard() { 
texture= Assets.manager.get(Assets.background, Texture.class); 
} 

所以,當我運行程序的時候,在顯示給我的任何東西之前崩潰: 「致命的例外:GLThread 32182」「資產不是loade d:資產/數據/ lawn.png」

+0

通常情況下,您不需要將'assets /'作爲路徑的一部分。它希望路徑*相對*到資產目錄。並且不要讓您的AssetManager引用爲靜態,否則您將有內存泄漏和損壞的紋理。 – Tenfour04 2015-04-03 03:49:00

+0

我不同意這一點。我在我所有的遊戲中都有一個靜態的AssetManager,它工作得很好。只要您正確實施生命週期方法並在適當的時間執行'Assets.manager.dispose()',這不會導致任何問題。另外,它非常方便! – noone 2015-04-03 06:09:31

回答

4

有這麼多你的代碼錯誤...

public class Assets { 

public static final AssetManager manager = new AssetManager(); // 1) 
public static final String background = "assets/data/lawn.png"; // 2) 
public static void load() { 

    manager.load(background, Texture.class); 
    manager.get(background, Texture.class); // 3) 
} 
public static void dispose()  { 
    manager.dispose(); 
} 

public static boolean update() { 
    return manager.update(); 
} 

public class TombStone extends Game implements Screen { // 4) 
@Override 
public void render() { 
    //assets.manager.update(); 
    Assets.load(); // 5) 
    Assets.manager.update(); 
    super.render(); 
} 

1)你的經理是public,但你仍然提供其他的方法來操作它(例如更新和處置)。使其私密或刪除方法,並直接在Assets.manager上工作。

2)資產相對於assets目錄。這就是爲什麼它應該是data/lawn.png

3)這就是爲什麼你會得到例外。 AssetManager.load()只是標記要加載的內容,但不會立即加載它。這是AssetManager.update()(異步)或AssetManager.finishLoading()(同步)所做的。如果您嘗試使用之前實際上加載它,您會得到此異常。只需刪除這一行。

4)延伸GameAND實施Screen沒有任何意義。一次只做其中一個。遊戲有屏幕,但它不是屏幕本身。

5)您正在標記您的資產一次又一次地加載。每幀調用render()。將Assets.load()移至Screen.show()方法,該方法僅執行一次。

+0

感謝您指出這些東西。整理出來。但問題依然存在。還有什麼可能是錯的嗎? – Benni 2015-04-03 12:31:33

+0

你仍然會得到這個異常?請將代碼更新爲當前狀態。 – noone 2015-04-03 14:26:25

+0

Yepp。更新代碼 – Benni 2015-04-03 14:44:41