Libgdx:当AssetManager.Update()返回true时,无法转换纹理

时间:2016-12-13 22:31:45

标签: java libgdx

我正在学习如何使用libgdx而且我没有在这里或者docs找到一个awsnser。 我的问题在标题中非常清楚。当我尝试在5秒之前加载纹理时(这是因为我使用的是Gdx计时器,仅用于测试)应用程序崩溃并提供此

Exception in thread "LWJGL Application" java.lang.ClassCastException: com.badlogic.gdx.graphics.Texture cannot be cast to com.badlogic.gdx.scenes.scene2d.ui.Image
at com.hoticecream.mad.Background.setStaticBackground(Background.java:33)
at com.hoticecream.mad.Playgorund$1.run(Playgorund.java:102)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.executeRunnables(LwjglApplication.java:257)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:208)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)

我会发布全班,因为很短

 class Background {

    private  Image background;
    private final String backgroundName;
    private  AssetManager manager;

    Background(AssetManager manager){

        this.manager = manager;

        background = new Image();

        backgroundName = "background1.png";
        manager.load(backgroundName, Texture.class);
        manager.finishLoadingAsset(backgroundName);



    }

    public void setStaticBackground(Stage stage){


        //here is where error happends, affter manager.update() returning true
        if(manager.update()){
            background = manager.get(backgroundName);

        }else {
            Gdx.app.log("Manager","not loaded");
        }

        background.setHeight(stage.getHeight());
        background.setWidth(stage.getWidth());

        stage.addActor(background);
    }

    public void dispose(){

        manager.unload(backgroundName);

    }

}

幻灯片说明:资产经理通过内部类

的参数传递

1 个答案:

答案 0 :(得分:1)

显然,您从管理器获取的对象(它的纹理,因为设置的加载器类型 - manager.load(backgroundName, Texture.class);)不能转换为Image类型。

尝试从纹理创建一个Image对象:

...
if(manager.update()){
    background = new Image((Texture) manager.get(backgroundName));
...