Текст libgdx на Android

Я новичок в libgdx и пытаюсь отобразить текст на экране.

Я просмотрел несколько руководств, и все они говорят, что я должен инициировать BitmapFont без параметров, и тогда он будет использовать шрифт по умолчанию. Но на моем устройстве Android он просто показывает эти черные прямоугольники: Черные прямоугольники в форме букв

И вот мой код:

public class GameOverScreen implements Screen {
    private JumpGame game;
    private OrthographicCamera cam;

    private BitmapFont gameOverFont;
    private Label.LabelStyle labelStyle;
    private Label label;

public GameOverScreen(JumpGame game) {
    this.game = game;
    cam = new OrthographicCamera();

    gameOverFont = new BitmapFont();
    labelStyle = new Label.LabelStyle(gameOverFont, Color.BLACK);
    label = new Label("Game Over", labelStyle);
}

@Override
public void show() {
    cam.setToOrtho(false, game.getWidth() / 4, game.getHeight() / 4);
    game.batch.setProjectionMatrix(cam.combined);
}

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    game.batch.begin();
    label.draw(game.batch, 1);
    game.batch.end();
}

@Override
public void resize(int width, int height) {

}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void hide() {

}

@Override
public void dispose() {

}
}

ИЗМЕНИТЬ:

Итак, я запускал Скрин с текстом из второго треда. Когда я запускаю его "нормально", он работает нормально. Может кто-нибудь объяснить, почему это так, и как обойти это, если я хочу запустить его из потока?


person Robert Gers    schedule 08.05.2017    source источник
comment
На десктопе нормально работает?   -  person Abhishek Aryan    schedule 08.05.2017
comment
@AbhishekAryan да, это работает на рабочем столе   -  person Robert Gers    schedule 08.05.2017
comment
Все элементы пользовательского интерфейса должны выполняться в основном потоке. Если вы находитесь в другом потоке, используйте Gdx.app.postRunnable()   -  person Nathan    schedule 08.05.2017
comment
@RóbertGers, каково значение game.getWidth() и game.getHeight()   -  person Abhishek Aryan    schedule 08.05.2017
comment
Да, спасибо @Nathan, это помогло!   -  person Robert Gers    schedule 08.05.2017


Ответы (1)


Согласно вики

Для передачи данных в поток рендеринга из другого потока мы рекомендуем использовать Application.postRunnable(). Это запустит код в Runnable в потоке рендеринга в следующем кадре до вызова ApplicationListener.render().


Метка является частью графа 2D-сцены libgdx, поэтому ее лучше использовать со сценой.

Если вы хотите нарисовать шрифт, вы можете просто рисовать с помощью Batch.

font.draw(batch,"Hello World",100,100);
person Abhishek Aryan    schedule 08.05.2017