LibGDX And​​roid onPause更改纹理

时间:2013-11-29 15:31:23

标签: java android opengl-es libgdx

我在游戏开始时使用gdx-freetype加载了truetype字体。加载时间太长,所以我想在另一个线程中加载字体。但是当它加载完毕后,字体无法正确呈现。喜欢这个

textures not displaying correctly

但是,当我关闭屏幕并再次打开时,它会正确显示: Why

我想知道当屏幕关闭再打开时切换此更改的内容,我应该如何修复它。

代码:

public class Game extends com.badlogic.gdx.Game {

SpriteBatch batch;
BitmapFont engFont;

AsyncResult<Void> loadResult;

static final int width = 800, height = 480;

@Override
public void create() {

    batch = new SpriteBatch();

    loadResult = new AsyncExecutor(10).submit(new LoadGameTask(this));

    setScreen(new LogoScreen(this));
} // omitted

LoadGameTask类:

class LoadGameTask implements AsyncTask<Void> {

Game game;

LoadGameTask(Game game) {

    this.game = game;
}

@Override
public Void call() throws Exception {

    FreeTypeFontGenerator gen;
    gen = new FreeTypeFontGenerator(Gdx.files.internal("data/square.ttf"));

    game.engFont = gen.generateFont(100, Chars.chars, false);

    gen.dispose();

    game.engFont.setColor(1, 1, 1, 1);

    game.engFont.getRegion().getTexture().setFilter(
            Texture.TextureFilter.Linear, Texture.TextureFilter.Linear
    );

    return null;
}

LogoScreen类

public class LogoScreen implements Screen{

Game game;

OrthographicCamera camera;

public LogoScreen(Game game) {

    this.game = game;

    camera = new OrthographicCamera();
    camera.setToOrtho(false, Game.width, Game.height);
}

@Override
public void render(float v) {

    Gdx.gl.glClearColor(0.1f, 0.5f, 0.8f, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    if(game.loadResult.isDone()) {

        camera.update();
        game.batch.setProjectionMatrix(camera.combined);

        game.batch.begin();
        game.engFont.draw(
                game.batch,
                "Tenplus 한글",
                Game.width / 2, Game.height / 2
        );
        game.batch.end();

    }
}//omitted

1 个答案:

答案 0 :(得分:2)

通常人们会在暂停后纹理消失,而不会出现问题。 :)

我认为在不同的线程上加载纹理是行不通的。通常,Libgdx不支持其他线程上的OpenGL操作。您可以执行打开字体文件的部分并在不同的线程上读取它,但我认为您需要确保在主线程上创建字体纹理的部分更加快乐。

我怀疑暂停后重新加载生成的字体的新代码(请参阅https://github.com/libgdx/libgdx/pull/896)是在暂停后为您修复字体。