2017-04-13 63 views
1

我在使用assetManager加載資產時出現了一個奇怪的問題。我的資產管理器是我製作的一個單獨的課程,可以縮短和整潔所有內容。我的資產類不是靜態的。我將所有資產加載到非靜態assetDescriptor中。Android Libgdx assetManager:資產未加載

我加載了我的啓動畫面,它在顯示時加載了我所有的資產。當我調用其他屏幕時,我已經加載的資產無法加載,導致我的遊戲崩潰。啓動畫面會加載,但當它分配新的畫面時會崩潰。

我已經在這個問題上花了2天。嘗試超過15個變化。沒有優勢。

我的錯誤信息是:

com.badlogic.gdx.utils.GdxRuntimeException: Asset not loaded: stuff.png 
    at com.badlogic.gdx.assets.AssetManager.get(AssetManager.java:144) 
    at com.badlogic.gdx.assets.AssetManager.get(AssetManager.java:167) 
    at com.nectar.pewdybird.mainMenu.<init>(mainMenu.java:71) 
    at com.nectar.pewdybird.pewdyBird.render(pewdyBird.java:68) 
    at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:459) 
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1523) 
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

Splash.class:

public Assets assets; 

public void create(){ 
    assets = new Assets(); 
    assets.load(); 
} 

public void render(){ 
    if(assets.update()) { 
     setScreen(new mainMenu(this)); 
     dispose(); 
    } else { 
     //Splash Screen 
     gl.glClearColor(0,0,0,1); 
     gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     batch.begin(); 
     //Draws SplashScreen 
     batch.end(); 
    } 
} 

public void dispose(){ 
    this.screen.dispose(); 
    this.batch.dispose(); 
} 

mainMenu.class

public Assets assets; 
private Texture Stuff;  

public mainMenu(Splash game){ 
    assets = game.assets; 
    Stuff = game.assets.manager.get(game.assets.stuff); 


} 

個Asset.class

public AssetManager manager = new AssetManager(new InternalFileHandleResolver()); 

public final AssetDescriptor<Texture> stuff = 
     new AssetDescriptor<Texture>("stuff.png", Texture.class); 

public void load(){ 
    manager.load(stuff); 
    //12 More loads 
    manager.finishLoading(); 

} 

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

感謝您的閱讀和可能與我也許簡單的問題幫助。

+0

1.飛濺類實現屏幕或擴展遊戲類。 ? 2.你正在使用mainMenu的參數化構造函數,它在哪裏? – Aryan

+0

Splash擴展com.badlogic.gdx.game; 和mainMenu實現Screen。和主菜單 我應該做的飛濺工具屏幕以及?我只是想,我實際上並沒有在我的飛濺中使用gdx.game。 – deathwillcome800

回答

1

看看你的mainMenu班。您正在創建一個新的Assets對象,該對象沒有任何資產,因此您無需創建新的Assets對象使用資產對象Splash,因爲您已在該對象上加載資產。

public Assets assets; 
public Texture Stuff; 

public mainMenu(){ 
    assets = new Assets(); // why are you creating new Assets here 
    Stuff = assets.manager.get(assets.stuff); 
} 

其實你正在使用參數化的構造函數Splash類創建的對象mainMenu

public mainMenu(Splash splash){ 
    assets = splash.assets; // instead of creating new take reference of Splash class assets 
    Stuff = assets.manager.get(assets.stuff); 
} 
+0

我已將mainMenu中的Assets對象更改爲「public Assets assets = game.assets;」和我的mainMenu方法看起來像這個公共mainMenu(飛濺遊戲)。它沒有解決問題。一樣的。 – deathwillcome800

+0

您在代碼中編輯的內容請在您的問題中編輯,以便我可以進一步找到您的錯誤。 – Aryan

+0

我現在要這樣做。我的道歉。 – deathwillcome800