LibGDX — прекрасная библиотека. Её очень легко использовать, хотя в ней есть некоторые аспекты, которые не так просты и понятны. Шрифты — один из примеров. Я провёл много часов, прежде чем нашёл решение, при котором шрифты и на десктопе, и в мобильных телефонах выглядят пристойно. Я уже писал, что у меня получилось добиться результатов с Distance Field, но я ошибался. Заставить хорошо выглядеть удалось только TTF.
Забудьте о bitmap‑шрифтах. На попытки заставить их выглядеть пристойно на всех девайсах уйдёт уйма времени. Результат при этом будет более чем посредственным — даже несмотря на то, что это более или менее рекомендованный путь. Но всё‑таки, если у вас не сотни шрифтов, лучше использовать TrueType Fonts.
TTF дают великолепный результат. Но есть в их использовании один маленький трюк: нужно размер шрифта сделать независимым от размера экрана. Вот сниппет, который готовит, конвертирует и добавляет в скин TTF‑шрифт:
class MyGame() : Game() {
var skin: Skin = Skin()
override fun create() {
val generator = FreeTypeFontGenerator(Gdx.files.internal("Roboto-Regular.ttf"))
val param = FreeTypeFontGenerator.FreeTypeFontParameter()
val ratio = Gdx.graphics.width / 960f
param.size = (48 * ratio).toInt()
val robotoFont = generator.generateFont(param)
skin.addRegions(TextureAtlas(Gdx.files.internal("skin.atlas")))
skin.add("normaltext", robotoFont)
skin.load(Gdx.files.internal("skin.json"))
}
override fun dispose() {
super.dispose()
skin.dispose()
}
}
Всё очень просто. Работает идеально. Никаких просадок производительности не замечено.