Вопрос по java, libgdx – Libgdx: есть ли простой способ центрировать текст на каждой оси на кнопке?

17

Я пытался найти способ центрировать текст на кнопке, но могунайти простой, многоцелевой способ. Я могу сделать это, но это будет работать только для определенной строки, а не для любой строки. Я хотел бы знать, если есть способ центрировать любую строку на кнопке. Моя кнопка в этом случае 185x50.

Я смог центрировать эту кнопку на экране, вот так:

buttonX = WIDTH / 2 - (screen.getRegionWidth() / 2);
buttonY = HEIGHT / 2 - (screen.getRegionHeight() / 2);

Любая помощь приветствуется. :)

Используете ли вы libGDX Stage UI "кнопка»? Или ваш собственный класс кнопок? P.T.

Ваш Ответ

3   ответа
12

Для более новой версии libgdx функция BitMapFont.getBounds () isn 'T там в API больше. Вы можете использовать GlyphLayout, чтобы получить границы. Например,

BitmapFont font;
SpriteBatch spriteBatch;
//... Load any font of your choice first
FreeTypeFontGenerator fontGenerator = new FreeTypeFontGenerator(
   Gdx.files.internal("myFont.ttf")
);
FreeTypeFontGenerator.FreeTypeFontParameter freeTypeFontParameter =
      new FreeTypeFontGenerator.FreeTypeFontParameter();
freeTypeFontParameter.size = size;
fontGenerator.generateData(freeTypeFontParameter);
font = fontGenerator.generateFont(freeTypeFontParameter);

//Initialize the spriteBatch as requirement

GlyphLayout glyphLayout = new GlyphLayout();
String item = "Example";
glyphLayout.setText(font,item);
float w = glyphLayout.width;
font.draw(spriteBatch, glyphLayout, (Game.SCREEN_WIDTH - w)/2, y);
TextButton, на который ссылалась Пинки Вихрь, был незапущенным без использованияstage, Приятно видетьsetText используется вместо ненужной реализации. John
0

Попробуйте следующее:

label.setPosition(Gdx.graphics.getWidth()/2-(label.getPrefWidth()/2),Gdx.graphics.getHeight()-(label.getPrefHeight()/2));
53

Обновлен ответ на libgdx версии 1.7.1-SNAPSHOT:

Самый простой способ сделать это - использовать класс TextButton из libgdx. Текст из TextButton центрируется по умолчанию. Это все еще работает!

Обновленный пример:

final BitmapFont font = new BitmapFont();

final String text = "Test";

final GlyphLayout layout = new GlyphLayout(font, text);
// or for non final texts: layout.setText(font, text);

final float fontX = objectX + (objectWidth - layout.width) / 2;
final float fontY = objectY + (objectHeight + layout.height) / 2;

font.draw(batch, layout, fontX, fontY);

Устаревший пример:

Это больше не работает!

Если вы не хотите использовать его, вы можете получить ширину и высоту шрифта с помощью:

    font.getBounds("Test text");

Таким образом, вы можете сделать что-то вроде этого:

    String fontText = "";
    fontX = buttonX + buttonWidth/2 - font.getBounds(fontText).width/2;
    fontY = buttonY + buttonHeight/2 + font.getBounds(fontText).height/2;
Зачем все это беспокоиться о произвольном центрировании текста? Просто используйте TextButton вместо этого. Это автоматически центрирует свой текст Malkierian
спасибо, отлично работает на 1.9.7-SNAPSHOT Kolesnikovich Dmitry
Чтобы добавить к этому ответу, вы можете легко отцентрировать, просто вычтя ширину текста из игры ».s ширина и деление на 2.fontX = (gameWidth - font.getBounds(fontText).width) / 2 Willem Ellis
@AlexKapustian вы можете использовать glyphlayout (в более новой версии libgdx) для этой цели. bytestorm
Я думаю, что они изменили это, потому что я могуне найти его в API Alex Kapustian

Похожие вопросы