Libgdx:有没有一种简单的方法可以在按钮的每个轴上使文本居中?

2022-09-02 05:03:04

我一直在试图找出一种方法将文本居中放在按钮上,但找不到一种简单的多用途方法。我可以这样做,但它只适用于某个字符串,不适用于任何字符串。我想知道是否有办法将任何字符串放在按钮上。在这种情况下,我的按钮是185x50。

我已经能够在屏幕上将此按钮居中,如下所示:

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

任何帮助将不胜感激。:)


答案 1

更新了 libgdx 版本 1.7.1-SNAPSHOT 的答案:

最简单的方法是使用 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中不再存在。您可以使用字形布局来获取边界。例如

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);

推荐