绘制垂直居中的多行 BitmapFont
Draw multi-line BitmapFont vertically centered
我希望将一些跨越多行的长包装文本居中放置在一个矩形(或其他任何东西)上,如下图所示(我不需要隐藏多余的文本,但它会是一个很大的优势我'不胜感激):
我已经能够使用如下单行文本实现垂直居中:
BitmapFont font = new BitmapFont();
String text = "Hello";
Rectangle bounds = new Rectangle(0, 0, 100, 100);
void render(SpriteBatch spriteBatch) {
font.draw(
spriteBatch,
text,
bounds.x,
bounds.y + bounds.height / 2f + font.getLineHeight());
}
我知道有一个 BitmapFont.draw()
方法变体可以让您指定水平对齐方式、文本的目标宽度和换行标志,但我似乎找不到 垂直对齐方式 对齐多行文本。
过去这可以通过 BitmapFont.getBounds()
和一些数学来实现,但在 LibGDX 1.9.9 中没有这样的方法。
使用 GlyphLayout class 我们可以获得您的换行文本的高度,我制作了一个辅助方法将文本居中 Rectangle
提高代码的可读性在我们 apps/games 的主要 render()
方法中:
private static GlyphLayout glyphLayout = new GlyphLayout();
public static void drawCentered(BitmapFont font, SpriteBatch spriteBatch,
String text, Rectangle bounds) {
glyphLayout.setText(font, text, Color.BLACK, bounds.width, Align.center, true);
font.draw(
spriteBatch,
text,
bounds.x,
bounds.y + bounds.height / 2f + glyphLayout.height / 2f,
bounds.width,
Align.center,
true);
}
我希望将一些跨越多行的长包装文本居中放置在一个矩形(或其他任何东西)上,如下图所示(我不需要隐藏多余的文本,但它会是一个很大的优势我'不胜感激):
我已经能够使用如下单行文本实现垂直居中:
BitmapFont font = new BitmapFont();
String text = "Hello";
Rectangle bounds = new Rectangle(0, 0, 100, 100);
void render(SpriteBatch spriteBatch) {
font.draw(
spriteBatch,
text,
bounds.x,
bounds.y + bounds.height / 2f + font.getLineHeight());
}
我知道有一个 BitmapFont.draw()
方法变体可以让您指定水平对齐方式、文本的目标宽度和换行标志,但我似乎找不到 垂直对齐方式 对齐多行文本。
过去这可以通过 BitmapFont.getBounds()
和一些数学来实现,但在 LibGDX 1.9.9 中没有这样的方法。
使用 GlyphLayout class 我们可以获得您的换行文本的高度,我制作了一个辅助方法将文本居中 Rectangle
提高代码的可读性在我们 apps/games 的主要 render()
方法中:
private static GlyphLayout glyphLayout = new GlyphLayout();
public static void drawCentered(BitmapFont font, SpriteBatch spriteBatch,
String text, Rectangle bounds) {
glyphLayout.setText(font, text, Color.BLACK, bounds.width, Align.center, true);
font.draw(
spriteBatch,
text,
bounds.x,
bounds.y + bounds.height / 2f + glyphLayout.height / 2f,
bounds.width,
Align.center,
true);
}