web-dev-qa-db-ja.com

Libgdx:ボタンの各軸の中央にテキストを配置する簡単な方法はありますか?

ボタンの中央にテキストを配置する方法を見つけようとしていますが、簡単で多目的な方法が見つかりません。私はそれを行うことができますが、それは特定の文字列に対してのみ機能し、どの文字列に対しても機能しません。ボタンの中央に文字列を配置する方法があるかどうか知りたいのですが。この場合の私のボタンは185x50です。

次のように、このボタンを画面の中央に配置することができました。

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

どんな助けでも大歓迎です。 :)

18
Sean Heiss

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;
54
Pinkie Swirl

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

次のことを試してください。

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