1

我正在 libGDX 中创建游戏。我想创建一些 UI 元素(按钮和东西),因为我的应用程序设计,我想在世界空间中绘制它们,作为其他游戏对象。

我正在使用从真字体文件(.ttf)生成位图字体的 Freetype 生成器。问题是字体的尺寸以像素为单位。

我用来渲染世界的正交相机,视口大小约为 10x10,所以当我生成大小为 10 的字体时,它几乎覆盖了整个屏幕(太大)并且看起来也很丑,因为为字体生成了位图太小(像素太少)。

我想要的是创建精灵,以相同的大小(世界空间)绘制它并在其上绘制文本,然后基本上创建一个按钮。

有没有一些成熟的方法来处理这个问题?

4

1 回答 1

1

感谢澄清评论,我想出了解决方案。

我选择了一个我想绘制文本的点,通过我的世界相机将它投影到屏幕空间。然后我翻转y轴:

point.y = viewportHeight - point.y;

然后我用 ScreenViewport 取消投影它(用于绘制文本的单独视口,使用屏幕大小的相机,因此 1unit == 1pixel)。现在我可以在投影中绘制文本,其中 1unit = 1pixel,在屏幕上与之前在世界空间中选择的点位于同一位置的点上。

我还希望能够在矩形边界内绘制文本。为此,我选择了另一点。此时文本应该结束。做与起点相同的程序,然后计算宽度

targetWidth = endpoint.x - startpoint.x;

然后我使用 GlypthLayout 类以某些(生成的)字体大小获取文本的实际宽度。

actualWidth = glyphLayout.width;

当我像这样缩放字体时

font.getData().setScale(targetWidth / actualWidth);

我的字体被缩放,因此绘制的文本与目标宽度一样宽。

但要注意另一个问题!当我通过 FreetypeGenerator 生成大小约为 300 时更大的 bimap 字体时,一些字母不绘制,并且丢失了。(可能是错误)。

于 2019-01-02T20:44:31.647 回答