2017-04-13 2 views
1

Ich habe ein seltsames Problem mit dem Laden meiner Assets, mit dem AssetManager. Mein AssetManager ist eine separate Klasse, die ich gemacht habe, um alles kürzer und sauberer zu machen. Meine Asset-Klasse ist nicht statisch. Ich habe alle Assets in einem nicht statischen AssetDescriptor geladen.Android Libgdx AssetManager: Asset nicht geladen

Ich lade meinen Startbildschirm, der alle meine Assets lädt, während dieser angezeigt wird. Wenn ich den anderen Bildschirm anrufe, können die Assets, die ich geladen habe, nicht geladen werden und mein Spiel zum Absturz bringen. Der Begrüßungsbildschirm wird geladen, aber wenn ein neuer Bildschirm zugewiesen wird, stürzt er ab.

Ich habe 2 Tage zu diesem Thema verbracht. versuche mehr als 15 Variationen. Um keinen Vorrang zu haben.

Meine Fehlermeldung lautet:

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(); 
} 

Vielen Dank für das Lesen und möglicherweise mit meiner vielleicht einfache Frage zu helfen.

+0

1. Splash-Klasse implementiert Bildschirm oder erweitert Spielklasse. ? 2. Sie verwenden den parametrisierten Konstruktor von mainMenu, wo ist es? – Aryan

+0

Splash erweitert com.badlogic.gdx.game; und mainMenu implementiert Bildschirm. und das MainMenu sollte ich auch den Splash-Bildschirm zu machen? Ich dachte nur, dass ich gdx.game nicht in meinem Splash benutze. – deathwillcome800

Antwort

1

Betrachten Sie Ihre mainMenu Klasse. Sie erstellen ein neues Assets-Objekt, das kein Asset besitzt. Anstatt ein neues Objekt Assets zu erstellen, verwenden Sie das Asset-Objekt Splash, weil Sie Assets für dieses Objekt geladen haben.

public Assets assets; 
public Texture Stuff; 

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

Eigentlich sind die Erstellung von Objekt von mainMenu durch parametrisierte Konstruktor in Splash-Klasse

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

Ich habe mein Assets-Objekt in mainMenu in "public assets assets = game.assets;" und meine MainMenu-Methode sieht wie dieses öffentliche MainMenu (Splash-Spiel) aus. Es behebt das Problem nicht. es ist das gleiche. – deathwillcome800

+0

Was Sie in Ihrem Code bearbeitet haben, bearbeiten Sie bitte hier in Ihrer Frage, damit ich Ihren Fehler weiter finden kann. – Aryan

+0

Ich werde das jetzt tun. meine Entschuldigung. – deathwillcome800

Verwandte Themen