可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have been trying to figure out a way to center text on a button, but can't find an easy, multi-purpose way to. I can do it, but it will only work for a certain string, not for any string. i would like to know if there is a way to center any string on a button. My button in this case is 185x50.
I have been able to center this button on the screen, like so:
buttonX = WIDTH / 2 - (screen.getRegionWidth() / 2); buttonY = HEIGHT / 2 - (screen.getRegionHeight() / 2);
Any help would be much appreciated. :)
回答1:
Updated the answer to libgdx version 1.7.1-SNAPSHOT:
The easiest way to do this, is to use the TextButton class from libgdx. The text from a TextButton is centered by default. This still works!
Updated example:
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);
Outdated example:
This no longer works!
If you do not want to use it, you can get the font width and height with:
font.getBounds("Test text");
So you can do something like this:
String fontText = ""; fontX = buttonX + buttonWidth/2 - font.getBounds(fontText).width/2; fontY = buttonY + buttonHeight/2 + font.getBounds(fontText).height/2;
回答2:
For the newer version of libgdx the function BitMapFont.getBounds() isn't there in api anymore. You can use GlyphLayout to get bounds.For example,
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);
回答3:
Try the following:
label.setPosition(Gdx.graphics.getWidth()/2-(label.getPrefWidth()/2),Gdx.graphics.getHeight()-(label.getPrefHeight()/2));