【问题标题】:Libgdx: Is there an easy way to center text on each axis on a button?Libgdx:有没有一种简单的方法可以使按钮上每个轴上的文本居中?
【发布时间】:2012-12-25 15:30:15
【问题描述】:

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

我已经能够使这个按钮在屏幕上居中,如下所示:

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

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

【问题讨论】:

  • 您使用的是 libGDX Stage UI“按钮”吗?还是你自己的按钮类?

标签: java libgdx


【解决方案1】:

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

最简单的方法是使用 libgdx 中的 TextButton 类。 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 即可轻松居中。fontX = (gameWidth - font.getBounds(fontText).width) / 2
  • 我认为他们改变了它,因为我在 api 中找不到它
  • @AlexKapustian 您可以为此目的使用 glyphlayout(在较新版本的 libgdx 中)。
  • 为什么所有这些都担心任意居中文本?只需使用 TextButton 代替。它会自动将其文本居中
【解决方案2】:

对于较新版本的 libgdx,API 中不再存在 BitMapFont.getBounds() 函数。您可以使用 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);

【讨论】:

  • Pinkie Swirl 提到的 TextButton 在没有使用 stage 的情况下是无法启动的。很高兴看到 setText 被使用而不是不必要的实例化。
【解决方案3】:

尝试以下方法:

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

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多