AssetManager似乎无法正常工作

时间:2014-05-03 08:40:57

标签: java android libgdx android-assets

我试图用AssetManager加载我的libgdx游戏的关卡图像,从我跟随的指南看起来很容易,但我有一种错误..

我在名为Assets.java的类中使用此代码 包装载机;

import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.graphics.Texture;

public class Assets {

    public static final AssetManager manager = new AssetManager();

    public static final String level1 = "level1.png";

    public static void load() {
        manager.load(level1, Texture.class);
    }

    public static void dispose() {
        manager.dispose();
    }
}

和主要类中的代码:

@Override
public void create () {

    Assets.load();

    while(!Assets.manager.update()) {
        System.out.println(Assets.manager.getProgress()*100+"%");
    }

    setScreen(new GameScreen());
}

但它始终显示0.0%并且从不加载图像

文件图片我试图加载300 KB的权重,我也试过小图片,但没有任何变化..

修改

它立即进入新屏幕,但仍然无限制地打印出0.0%从未加载图像

2 个答案:

答案 0 :(得分:3)

如果要在创建内部完成加载,请调用.finishLoading();。否则你需要调用游戏循环中的.update()。有关详细信息,请参阅this link.

此外,我不会让经理静止!您无法保证您只拥有其中一个对象,因此如果您访问资产而未在该AssetManager实例上加载它,则可能会发生这种情况。每当您访问管理器时,都会创建一个新的Assetmanager并调用静态方法。因此,当您访问经理时,您总是需要加载资产,而不是我认为的正确行为。将其创建为常规对象,并在主对象上有一个实例,您可以将该实例传递给游戏的所有其他子系统。同时在子系统内部保留一个引用,以便您可以在需要时使用它。 =>静态版本不起作用。

像这样创建:

public class Assets {

    public AssetManager manager = new AssetManager();

    public static final String level1 = "level1.png";

    public void load() {
        manager.load(level1, Texture.class);
    }

    public void dispose() {
        manager.dispose();
    }
}

并像这样使用它:

private Assets assets;
@Override
public void create () {

    assets.load();
    //or call the assets.finishLoading();
    while(!assets.manager.update()) {
        System.out.println(assets.manager.getProgress()*100+"%");
    }

    setScreen(new GameScreen(assets)); //pass it to the gamescreen ctro!
}

您可以通过AssetManager扩展Assets类,并直接调用assets对象上的.update。 Assets extends AssetManager

public class Assets extends AssetManager{

    public static final String level1 = "level1.png";

    public void load() {
        this.load(level1, Texture.class);
    }
    //dispose not needed since you can call Assets.dispose() since the AssetManager is disposeable.
}

答案 1 :(得分:0)

while(!Assets.manager.update()) {
    System.out.println(Assets.manager.getProgress()*100+"%");
}

根据您的代码,仅在未100%加载资产管理器时才会打印出来。尝试删除该条件,由于仅加载了一个纹理,它实际上将直接从0打印到1。