LibGdx和游戏中的字体 – 任何经过validation的方法?

我在我的游戏中使用3种字体大小:小,中,大。 我采取基本字体大小,并尝试根据屏幕大小和密度来缩放字体,但是这被certificate是相当困难的。

有没有人有一个成熟的公式缩放字体? 现在,我只是简单地使用屏幕的像素宽度将设备放入1x,2x和3x字体比例的桶大小,但我觉得我应该在计算中使用屏幕密度。

我曾经使用过的几种方法,每种都有自己的优点和缺点。

第一个是在Heiro中生成大约10种不同大小的字体,作为单个地图集的一部分。 然后我将它们导入静态的Assets类中,我用它来访问整个游戏中的资源。 当我想绘制一定大小的文本时,我调用了我的Assets类的一个静态方法,该类使用我想要绘制的大小,并将其从地图集中最近的BitmapFont提供给我想绘制的大小。

优点:只要您生成接近您需要的尺寸,文字看起来相当不错。 你不需要处理gdx-freetype。 加载速度很快,因为它只是一个单一的图集(虽然它可能很大)。 缺点:你的地图可能非常大。 这需要一些时间来调整在地图集所需的大小。 当我给地图集添加大小时,我需要手动将它们添加到资源类,以便它们可以被加载(尽管您可以做更聪明的事情来查看区域名称并推断包含的大小)。

第二个是使用gdx-freetype根据需要生成字体。 在我的资产类中,我有一种方法可以从字体文件中生成所需大小的字体。 我有一个caching,我用它来共享以前生成的字体的大小。

优点:文字在每个尺寸的屏幕上看起来都很完美 缺点:加载永远是不可能的,如果你在游戏中间首次使用字体大小(巨大的延迟),这是非常糟糕的。 我在启动时生成字体大小以隐藏这种延迟,但是然后我有一个长的加载屏幕来生成一堆字体。

我使用的第三种方法是使用gdx-freetype生成缩放到当前显示的小/中/大字号。 然后我可以根据需要设置缩放比例以获得正确的大小,并且可以设置纹理过滤来使其看起来不那么糟糕。 由于字体缩放到当前屏幕,所以在屏幕尺寸上看起来相当不错。

优点:文字看起来不错。 加载时间不长(只生成2或3个字体)。 文本适度地与屏幕尺寸成比例。 缺点:文字看起来可能不完美。 加载时间比单个图册要长。