绘制垂直居中的多行 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);
    }