我试图用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%从未加载图像
答案 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。