如何获得bitmapfont的自然字体?

时间:2016-10-23 15:49:16

标签: libgdx bitmap-fonts

如果我有一个bitmapfont,例如;

fonttexture = new Texture(Gdx.files.internal("data/fonttest.png"), true);
font= new BitmapFont(Gdx.files.internal("data/fonttest.fnt"), 
                     new TextureRegion(fonttexture ), true);

是否可以检索或推断关联的png纹理文件中使用的自然字体大小? * .fnt文件本身在第一行指定了这个;

info face="Calibri Light" size=32 bold=0 italic=0 charset=""

32 我在代码中。 我无法在BitmapFonts类上看到直接获取它的方法,但是可以获得各种其他与高度相关的属性。

我尝试从那些重新创建大小,但没有太多运气。

float baseToAssent = font.getCapHeight()+font.getAscent();
float baseToDecent = -font.getDescent();Decent);            
float fontHeight = baseToAssent+baseToDecent;  //too small, like 11 not 32

不是字体测量师? fontophile?...嗯...平面设计师,我可能把这些碎片拼错了,或者可能只是缺少碎片。

在任何一种情况下,以任何方式计算fonttest.png中使用的字体大小都会有所帮助。

由于

USECASE

我手动使用带有距离场着色器的纹理。了解纹理自然字体大小非常有用,可以准确地将文本和线高度缩放到任何请求的字体大小,而无需调整图像大小,从而降低质量。

1 个答案:

答案 0 :(得分:0)

不确定如何获取特定的字体大小,但您可以使用GlyphLayout轻松获取字体的字符串宽度和高度,如下所示:

    BitmapFont font = new BitmapFont(Gdx.files.internal("data/fonttest.fnt", false);

    GlyphLayout glyph = new GlyphLayout(font, "TextMessage");
    float width = glyph.width;
    float height = glyph.height;

如果您想了解有关GlyphLayout和BitmapFont的更多信息,请阅读此topic。 与你的32px字体进行了相当多的实验。字符串“W”似乎是29px宽,这是我能找到的最宽的,所以如果要存档的内容大小完全正确,那肯定不准确。

你可以做一个小hacky方法,将.fnt文件作为文本文件读取并在“size =”之后查找Integer,非常像properties文件工作,效率会降低但是会返回确切的值。