Vraag Libgdx: Is er een eenvoudige manier om tekst op elke as op een knop te centreren?


Ik heb geprobeerd een manier te vinden om tekst op een knop te centreren, maar ik kan geen gemakkelijke, veelzijdige manier vinden om dit te doen. Ik kan het, maar het werkt alleen voor een bepaalde string, niet voor een string. ik zou graag willen weten of er een manier is om een ​​string op een knop te centreren. Mijn knop is in dit geval 185x50.

Ik heb deze knop op het scherm kunnen centreren, zoals zo:

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

Alle hulp zou zeer op prijs worden gesteld. :)


16
2018-01-11 04:15


oorsprong


antwoorden:


Het antwoord op libgdx-versie 1.7.1-SNAPSHOT bijgewerkt:

De eenvoudigste manier om dit te doen, is om de TextButton-klasse te gebruiken van libgdx. De tekst van een TextButton is standaard gecentreerd. Dit werkt nog steeds!

Bijgewerkte voorbeeld:

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

Verouderd voorbeeld:

Dit werkt niet meer!

Als je het niet wilt gebruiken, kun je de breedte en hoogte van het lettertype krijgen met:

    font.getBounds("Test text");

Dus je kunt zoiets als dit doen:

    String fontText = "";
    fontX = buttonX + buttonWidth/2 - font.getBounds(fontText).width/2;
    fontY = buttonY + buttonHeight/2 + font.getBounds(fontText).height/2;

51
2018-01-12 18:09



Voor de nieuwere versie van libgdx is de functie BitMapFont.getBounds () er niet meer in api. U kunt GlyphLayout gebruiken om grenzen te verleggen. Bijvoorbeeld

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

12
2018-05-22 08:37



Probeer het volgende:

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

0
2018-04-12 20:12