2017-04-13 64 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