【问题标题】:Android Libgdx assetManager: asset not loadedAndroid Libgdx资产管理器:资产未加载
【发布时间】:2017-09-09 22:58:30
【问题描述】:

我在使用assetManager 加载我的资产时遇到了一个奇怪的问题。我的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();
}

ma​​inMenu.class

public Assets assets;
private Texture Stuff;    

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


}

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

感谢您阅读并可能帮助解决我可能很简单的问题。

【问题讨论】:

  • 1. Splash 类实现 Screen 或扩展 Game 类。 ? 2.你正在使用mainMenu的参数化构造函数,它在哪里?
  • Splash 扩展了 com.badlogic.gdx.game;和 mainMenu 实现屏幕。和 mainMenu 我应该也制作飞溅工具屏幕吗?我只是想我实际上并没有在我的启动画面中使用 gdx.game。

标签: java android libgdx loading assets


【解决方案1】:

查看您的mainMenu 课程。您正在创建一个新的 Assets 对象,它没有任何资产,因此不要创建一个新的 Assets 对象,而是使用 Splash 的 Assets 对象,因为您在该对象上加载了资产。

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

【讨论】:

  • 我已将 mainMenu 中的 Assets 对象更改为“public Assets assets = game.assets;”我的 mainMenu 方法看起来像这个 public mainMenu(Splash game)。它没有解决问题。一样的。
  • 您在代码中编辑的内容请在此处编辑您的问题,以便我进一步找到您的错误。
  • 我现在就这样做。我的道歉。
  • 我不认为这样的例外是一样的,不是你得到了一些其他的例外吗?检查你的异常?
  • 不要在 Splash 类的渲染方法中调用 dispose();
猜你喜欢
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2023-03-23
  • 2012-09-05
相关资源
最近更新 更多