如何设置Libgdx位图字体大小?

24

我正在使用位图字体在屏幕上渲染游戏帧率,但是没有设置字体大小的方法。这对我来说是个问题,因为我的摄像机视口很小,所以渲染出来的文本非常大且像素化。

font.draw(batch, Float.toString(Gdx.graphics.getFramesPerSecond), x, y);
5个回答

48
你试过使用setScale()方法吗?这是我用来调整字体大小的方法。
myFont.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
myFont.setScale(scale);

如果你遇到问题,请留下评论。
祝你好运!!
编辑:
使用最新的libgdx版本,尝试像这样缩放字体:
myFont.getData().setScale();

请将以下与编程有关的内容从英语翻译为中文。仅返回已翻译的文本:注意:如果您想将文本大小减半,请使用以下代码:myFont.setScale(0.5f); - Netero
现在没有setScale()方法了,它们已经将其删除。 - Kevin Bryan
3
font.getData().setScale()怎么样? - Netero
谢谢,但即使缩放为0.5f,它仍然很大。因为我正在使用box2d,所以我的视口太小了,一切都是以米为单位而不是像素。 - Kevin Bryan
1
实现上述答案并没有显示干净的文本...需要一种方法使其变得干净。 - Ashwani
显示剩余2条评论

7
我经常使用minos23建议的方法。但缺点是在放大时可能会出现像素化问题。花哨的大型位图字体可能占用大量空间,如果需要许多不同的字体,您可能会超出预算。
通过使用Gdx.Freetype,您可以从小的.ttf文件中在运行时创建位图字体。这意味着您只需要在应用程序中发送.ttf文件,并且可以基于用户设置(如分辨率)生成字体。
除了缩放和FreeType解决方案之外,还有多个不同字体大小的位图。这样,您的字体始终保持清晰,但要以运行时性能为代价来生成正确的字体。

3

setScale是要使用的函数。请注意,最新的LibGDX版本(尽管之前更改过)需要执行以下操作:

font.getData().setScale(2, 2);

以前只需要这样做:

font.setScale(2, 2);

setScale中的第一个数字是X轴缩放比例,第二个数字是Y轴缩放比例。


0

我和其他人一样使用setScale()函数来缩小字体大小,但是在这里我想提供另一个解决方案并且我有一个问题。为什么你不使用FPSRenderer实例或者为什么你不将fps标签绘制在另一个批次上,该批次的投影矩阵具有屏幕大小呢?


0
Netero的答案是可行的。 如果你想让代码更加简洁,你可以编写一个帮助函数:
public static void setLineHeight(BitmapFont font, float height) {
    font.getData().setScale(height * font.getScaleY() / font.getLineHeight());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接