如何在Libgdx中获得字符串宽度?

时间:2013-05-17 02:34:50

标签: libgdx width

我想知道如何以像素为单位获取字符串的宽度

3 个答案:

答案 0 :(得分:62)

BitmapFont API< 1.5.6

要确定String的宽度,使用Font并获得bounds的{​​{1}},您将要绘制。

String

BitmapFont API

您也可以获得正确偏移的高度以进行绘制。只需用高度替换宽度。

此外,对于多行文本,请使用BitmapFont.getBounds(String str).width 来获取界限。


BitmapFont API> = 1.5.6

BitmapFont API已在1.5.7中更改,因此现在有另一种获取边界的方法:

  

完成BitmapFont.TextBounds和getBounds。相反,将字符串赋予GlyphLayout并使用其宽度和高度字段获取边界。然后,您可以通过将相同的GlyphLayout传递给BitmapFont来绘制文本,这意味着字形不必像以前那样布局两次。

Source

示例:

getMultiLineBounds(someString).width

答案 1 :(得分:5)

根据@Nates回答:https://stackoverflow.com/a/20759876/619673调用方法

BitmapFont.getBounds(String str).width

并不总是返回适当的宽度!特别是当您重复使用字体时。 如果您希望绘制文本例如in the center of part of view port,则可以使用其他方法

来避免此问题
  

BitmapFont.drawWrapped(...)

示例代码:

 font.drawWrapped(spriteBatch, "text", x_pos, y_pos, your_area_for_text, BitmapFont.HAlignment.CENTER);

答案 2 :(得分:0)

如果您在UI中使用皮肤,那么找到要输入GlyphLayout的正确字体会很麻烦。

在这种情况下,我使用Label的丢弃实例为我计算所有内容,然后向Label询问宽度。

Skin skin = getMySkin();
Label cellExample = new Label("888.88888", skin);
cellExample.layout();
float cellWidth = cellExample.getWidth();

Table table = new Table(skin);
table.defaults().width(cellWidth);
// fill table width cells ...

如果你想自己定位文本,这不是答案,但是使UI布局稳定并且更少依赖于单元格的实际内容是有用的。