ios - Managing and loading assets via AssetManager (Libgdx) -


im having issues assetmanager provided libgdx. nullpointer:

java.lang.illegalargumentexception: texture cannot null.

at com.badlogic.gdx.graphics.g2d.textureregion.<init>(textureregion.java) @ com.test.test.screens.screens.mainscreen.show(mainscreen.java) @ com.badlogic.gdx.game.setscreen(game.java) @ com.test.test.screens.screens.splashscreen.render(splashscreen.java) 

i´ve checked , file it´s loading present , correct, it´s in code. , literally have no idea it.. told make sure create not new instance of assets creating existing instance of it. not sure if i´ve done correctly though.. class self:

public class assets {      public final assetmanager manager = new assetmanager();     private objectmap<string, texture> textures;     private objectmap<string, sound> sounds;     public  final string background = "test.jpg";  public assets() {     textures = new objectmap<string, texture>();     sounds = new objectmap<string, sound>();     manager.load(background, texture.class);  }  public boolean update() {     boolean done = manager.update();     if (done) {         finishloading();      }     return done; }  private void finishloading() {     textures.put(background, manager.get(background, texture.class));  }  public texture gettexture(string name) {     return textures.get(name); }     public void dispose()    {          manager.clear();      } } 

and @ moment declare in mainclass:

public class mainclass extends game  { public spritebatch batch; public purchaseinterface pi; //calls assets implemented in other classes public assets assets; public mainclass(purchaseinterface purchase, galleryopener opener){     this.gallery= opener;     this.pi = purchase; } @override public void create () {     batch = new spritebatch();     assets = new assets();     setscreen(new splashscreen(this));     }  @override public void resize(int width, int height) {     super.resize(width, height);  }  @override public void render () {     super.render();   }  @override public void dispose() {     super.dispose();     batch.dispose();     assets.dispose(); }  public assets getassets() {     return assets; }   @override public void pause() {     super.pause(); }   @override public void resume() {     // todo auto-generated method stub     super.resume(); } 

} , example of loading assets screen class:

 public assets assets; public mainscreen(mainclass gam) {     game = gam;     assets = game.getassets();     loadstore();     camera = new orthographiccamera(screenwidth,screenheight);     view = new stretchviewport(screenwidth, screenheight, camera);     view.apply();     camera.translate(camera.viewportwidth / 2, camera.viewportheight / 2);  }  public void loadstore()  {     background = assets.gettexture(assets.background); }    @override public void render(float delta) {      camera.update();      game.batch.setprojectionmatrix(camera.combined);      game.batch.begin();      game.batch.draw(background, 0, 0, 1000, 2000);      game.batch.end();  }  @override public void resize(int width, int height) {     view.update(width, height, true); }  @override public void show() { }     @override public void hide() {     // todo auto-generated method stub  }  @override public void pause() {     // todo auto-generated method stub  }  @override public void resume() { }  @override public void dispose() {     background.dispose(); } 

}

this not load background texture:

manager.load(background, texture.class); 

you need call the

manager.finishloading(); 

right after load() that. assetmanager.load() store path of asset. assetmanager.update() loads next item stored paths in other thread, assetmanager.finishloading() loads of items , waits loading thread finish. when draw image while loading other assets, need load first image (in case "background").

the other thing, think store things twice nothing (textures, sounds objectmaps). best practice use asset manager textures or assets "get" function.

i did this:

public class loadingscreen extends screen {      ...      @override     public void show() {        app.assets.load("data/textures/loading.pack", textureatlas.class);        app.assets.finishloading(); // waits loading finish         app.assets.load("data/textures/menu.pack", textureatlas.class);        app.assets.load("data/textures/sprites.pack", textureatlas.class);        ...      }      @override     public void render(float delta) {         if (app.assets.update()) { // loads next item in other thread             app.loadingfinished(); // create other screens         }                     ...     }      ... 

"app" game instance, "app.assets" assetmanager instance. when want have asset (but can run after loading finished!):

textureatlas atlas = app.assets.get("data/textures/sprites.pack", textureatlas.class); 

Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -