Libgdx: Есть ли простой способ центрировать текст на каждой оси на кнопке?
Я пытаюсь найти способ центрировать текст на кнопке, но не могу найти простой, многоцелевой способ. Я могу это сделать, но он будет работать только для определенной строки, а не для любой строки. Я хотел бы знать, есть ли способ центрировать любую строку на кнопке. Моя кнопка в этом случае равна 185x50.
Мне удалось центрировать эту кнопку на экране, например:
buttonX = WIDTH / 2 - (screen.getRegionWidth() / 2);
buttonY = HEIGHT / 2 - (screen.getRegionHeight() / 2);
Любая помощь будет высоко оценена.:)
Ответы
Ответ 1
Обновлен ответ на версию 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;
Ответ 2
Для более новой версии libgdx функция BitMapFont.getBounds() больше не существует в 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);