【发布时间】:2019-01-01 23:11:38
【问题描述】:
我正在 libGDX 中创建游戏。我想创建一些 UI 元素(按钮和东西),因为我的应用设计,我想在世界空间中绘制它们,就像其他游戏对象一样。
我正在使用 Freetype 生成器,它从真字体文件 (.ttf) 生成位图字体。问题是字体的尺寸是以像素为单位的。
我用来渲染世界的正交相机,视口大小约为 10x10,所以当我生成大小为 10 的字体时,它几乎覆盖了整个屏幕(太大)并且看起来很丑,因为生成的位图因为字体太小(像素太少)。
我想要的是创建精灵,以相同的大小(世界空间)绘制它并在其上绘制文本,然后基本上创建一个按钮。
是否有一些完善的方法来处理这个问题?
【问题讨论】:
-
我也遇到过同样的问题,我发现为这样的事情使用单独的舞台要容易得多。如果您选择走那条路线,可能有一种方法可以将您的游戏阶段的坐标映射到另一个阶段。但相信我,如果没有一些 hacky 解决方案,试图在尺寸为 10x10 的舞台上绘制字体是行不通的。在我的游戏中,我将 UI 阶段和游戏阶段完全分开。但是我从来不用在世界坐标中绘制文本,所以我帮不上什么忙。
-
setUseIntegerPositions(false) 在字体上设置比 1 更小的比例。但是为使用 ScreenViewport 的文本使用单独的相机可能会更干净/更容易。您必须使用游戏的 Viewport 投影到屏幕坐标,然后取消投影到文本层的 Viewport 以确定在哪里绘制它。但要注意 LibGDX 的问题:这两种方法之一(project/unproject)会翻转 Y 坐标,而另一种则不会,因此您必须在投影到文本层之前手动翻转屏幕坐标的 Y。
-
@Tenfour04 使用单独的视口似乎可行。但是如何确定正确的尺寸呢?示例:如果整个文本所需的宽度为 100px,字符串为“HelloWorld”,如何计算使渲染文本恰好为 100px 宽的字体大小?
-
我不知道有什么方法可以做到这一点。但是如果大约 100 px 是可以的,我会提前计算这个特定字体的平均字符宽度,以每个字体点大小的像素为单位。然后运行时的简单算术将为您提供要使用的点大小。
标签: java fonts libgdx bitmap-fonts