Подтвердить что ты не робот

Как я могу нарисовать текст с помощью Libgdx/Java?

У меня были большие проблемы с Google, как рисовать простой 2D-текст с помощью Libgdx. Вот код, который я собрал до сих пор:

SpriteBatch spriteBatch;
BitmapFont font;
CharSequence str = "Hello World!";
spriteBatch = new SpriteBatch();
font = new BitmapFont();

spriteBatch.begin();
font.draw(spriteBatch, str, 10, 10);
spriteBatch.end();

В коде нарисована строка Hello World, однако она испортила все мои другие рисунки. Они там, только жестоко изуродованы, и двигаться, и все такое. Я пробовал Gdx.gl11.glPushMatrix() и Gdx.gl11.glPopMatrix() вокруг почти всех подмножеств операторов.

Я сузил искаженные рисунки до вызова font.draw(), если это вывезено, все работает нормально (но, конечно, текст отсутствует).

4b9b3361

Ответ 1

Я не вижу большой причины для создания отдельной партии для текстового рисования. Используя gdxVersion = '1.4.1' (построенный с помощью gradle в Android Studio), код успешно рисует текст:

BitmapFont font = new BitmapFont(); //or use alex answer to use custom font

public void render( float dt )
  {
    batch.setProjectionMatrix(camera.combined); //or your matrix to draw GAME WORLD, not UI

    batch.begin();

    //draw background, objects, etc.
    for( View view: views )
    {
      view.draw(batch, dt);
    }

    font.draw(batch, "Hello World!", 10, 10);

    batch.end();
  }

Обратите внимание, что здесь вы рисуете координаты игрового мира, поэтому, если ваш персонаж перемещается (например, в платформер), то текст тоже будет перемещаться. Если вы хотите увидеть текст, то он будет исправлен на экране, что-то вроде Label/TextField или как он вызывается в разных интерфейсах пользовательского интерфейса, чем я рекомендую использовать Stage (и TextArea для текста), см., Например, о том, как использовать Этап здесь: http://www.toxsickproductions.com/libgdx/libgdx-basics-create-a-simple-menu/

Ответ 2

Когда я создал шрифт Bitmap, он был примерно таким:

font = new BitmapFont(Gdx.files.internal("Calibri.fnt"),Gdx.files.internal("Calibri.png"),false);

попробуйте это, загрузив некоторый файл шрифта (при загрузке шрифта, пожалуйста, проверьте, включен ли файл .fnt и .png файл для этого)

Ответ 3

Попробуйте вызвать несколько batch.begin() и batch.end():

CharSequence str = "Hello World!";
spriteBatch = new SpriteBatch();
font = new BitmapFont();

spriteBatch.begin();
font.draw(spriteBatch, str, 10, 10);
spriteBatch.end();
spriteBatch.begin();
//draw your other sprites here
spriteBatch.draw(...);
spriteBatch.end();

или просто используйте другой экземпляр SpriteBatch

Ответ 4

Чтобы создать файл .fnt, используйте hiero, который предоставляется веб-сайтом LibGDX.

Задайте размер шрифта 150, он создаст файл .fnt и .png. Скопируйте оба файла в свою папку с ресурсами.

Чтобы объявить шрифт:

BitmapFont font;

Чтобы загрузить шрифт: (В методе создания)

font = new BitmapFont(Gdx.files.internal("data/rayanfont.fnt"), false);
//rayanfont is the font name

Чтобы сделать:

batch.begin();
font.setScale(.2f);
font.draw(batch, "hello", x,y);
batch.end();

Это будет работать гладко.