Масштабируемые шрифты в LibGDX
Опубликовано 14 March 2016 в Java
Обновление 2016-07-14: Я все-таки нашел способ работать с TTF-шрифтами.
Работать со шрифтами в LibGDX оказалось неожиданно сложно. Создать растровый шрифт проблем нет, но вот заставить его масштабироваться под разные разрешения - реальная проблема. Более или менее рабочая практика - использовать Distance field. После этого нужно еще пробросить шрифт в описание скина.
Попытка использовать TTF провалилась. Настроить ее в LibGDX проще простого, но вот результат получается ужасным. Возможно я не до конца разобрался с этим процессом. Если у кого-либо из читателей есть опыт генерации красивых шрифтов из TTF, поделитесь в комментариях.
Я выбрал путь использования Distance field, как предлагается в документации. Используя Hiero добавляем к шрифту Distance field. Scale - 32. Spread сильно зависит от шрифта. Для Roboto Regular хороший результат получается при 1. Дальше по инструкции: Padding равным 1, X и Y равными -2.
Вот только полученный таким образом шрифт невозможно использовать на прямую ссылаясь на него из json с описание скина. Шрифт придется генерировать программно из-за того, что текстура требует наложения фильтра. На Kotlin получится вот такой код:
class MyGame() : Game() {
var skin : Skin = Skin()
override fun create() {
var robotoTexture = Texture(Gdx.files.internal("roboto.png"), true);
robotoTexture.setFilter(
Texture.TextureFilter.MipMapLinearNearest,
Texture.TextureFilter.Linear
);
var robotoFont = BitmapFont(
Gdx.files.internal("roboto.fnt"),
TextureRegion(robotoTexture),
false
);
skin.addRegions(TextureAtlas(Gdx.files.internal("skin.atlas")));
skin.add("font", robotoFont);
skin.load(Gdx.files.internal("skin.json"));
...
}
override fun dispose() {
super.dispose()
skin.dispose()
}
}
Результат, который получается я покажу на следующей неделе (очень на это надеюсь). Мой проект подходит к стадии, когда его уже надо показывать и собирать фидбек.
Возник вопрос? Мне всегда можно написать в Twitter: avkorablev