2013-01-11 11 views
15

Próbowałem znaleźć sposób na wyśrodkowanie tekstu na przycisku, ale nie mogę znaleźć łatwego, uniwersalnego sposobu. Mogę to zrobić, ale będzie działać tylko dla pewnego ciągu, a nie dla żadnego ciągu. Chciałbym wiedzieć, czy istnieje sposób wyśrodkować dowolny ciąg na przycisku. Mój przycisk w tym przypadku to 185x50.Libgdx: Czy istnieje łatwy sposób wyśrodkować tekst na każdej osi na przycisku?

udało mi się centrum tego przycisku na ekranie, tak jak poniżej:

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

Każda pomoc będzie mile widziane. :)

+0

Czy używasz "przycisku" interfejsu użytkownika interfejsu libGDX? Lub własną klasę przycisków? –

Odpowiedz

48

Updated odpowiedź do wersji 1.7.1 libgdx-SNAPSHOT:

Najprostszym sposobem, aby to zrobić, jest użycie klasy TextButton z libgdx. Tekst z TextButton jest domyślnie wyśrodkowany. To nadal działa!

Updated przykład:

archiwalna przykład:

To już nie działa!

Jeśli nie chcesz go używać, można uzyskać szerokość czcionki i wysokość z:

font.getBounds("Test text"); 

Więc można zrobić coś takiego:

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

Aby dodać tę odpowiedź, możesz łatwo wyśrodkować, odejmując szerokość tekstu od szerokości gry i dzieląc przez 2. 'fontX = (gameWidth - font.getBounds (fontText) .width)/2' –

+0

Myślę, że że zmienili to, ponieważ nie mogę go znaleźć w api –

+0

@AlexKapustian można użyć glyphlayout (w nowszej wersji libgdx) do tego celu. – bytestorm

10

Dla nowszych wersji libgdx funkcja BitMapFont.getBounds() nie jest już w api. Możesz użyć GlyphLayout, aby uzyskać ograniczenia. Na przykład:

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); 
Powiązane problemy