【发布时间】:2015-03-19 01:20:02
【问题描述】:
在研究框架 libgdx 的过程中,我发现了一种构建项目的绝妙方法。这是我加载纹理并显示它的示例。
实现 AssetManager 的 Singleton 模式
public class GameAsssetManager extends AssetManager {
private static GameAsssetManager instance;
public static GameAsssetManager getInstance(){
if(null == instance)
instance = new GameAsssetManager();
return instance;
}
public void init(){}
}
加载图片
public class LoadScreen implements Screen{
private void loadAssets(){
GameAsssetManager.getInstance().load("badlogic.jpg",Texture.class);
}
@Override
public void show() {
GameAsssetManager.getInstance().init();
loadAssets();
}
@Override
public void render(float delta) {
//Метод update возвращает true в том случаи, если все ресурсы загружены
if(GameAsssetManager.getInstance().update()){
ScreenManager.getInstance().show(CustomScreen.GAME);
}
}
...
}
最后显示图片
public class GameScreen implements Screen {
...
@Override
public void show() {
batch = new SpriteBatch();
texture = GameAsssetManager.getInstance().get("badlogic.jpg");
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 1, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(
texture,
Gdx.graphics.getWidth()/2 - texture.getWidth()/2,
Gdx.graphics.getHeight()/2 - texture.getHeight()/2
);
batch.end();
}
...
所以问题如下。编译应用程序后,一切正常。但是如果你关闭应用程序并重新启动已安装的应用程序,在应该显示纹理的地方会显示黑色方块。
【问题讨论】:
-
你有什么错误吗?
-
@Fahim 没有错误。如果在纹理之前添加 = GameAsssetManager.getInstance().get("badlogic.jpg");下一个纹理 = 新纹理(Gdx.files.internal(“src/11.jpg”));绘制了第一张图片。即 11.jpg