LibGDX - работаем с русскими шрифтами

libgdx logo
Получение навыков по LibGDX идет полным ходом, но cтолкнулся с одной проблемой, уверен что с ней сталкиваются многие русскоязычные разработчики, а именно работа с кириллическим текстом. И так разберем этот вопрос подробнее.


Главное не паниковать что опять для России все через одно место, без FreeTypeFont не работают и другие кириллические и азиатские языки, к примеру: украинский, сербский или японский и китайский.

Стандартный BitmapFont работает плохо, нет возможности увеличить шрифт, разве что масштабировать(СМОТРИТСЯ УБОГО), это влияет на качество букв. По этому нужно использовать freetypefont, он позволяет работать с любыми ttf шрифтами избавляя нас от головной боли.
Подключаем freetypefont
Первое что нужно сделать это подключить наш freetypefont к нашему проекту.
Если Вы только создаете новый проект то это делается элементарно, просто поставьте галочку freetypefont в меню создание проекта LibGDX.

В моем случае было по другому, я уже практически завершил разработку игрового приложения и только потом решил работать с текстом и наводить как говорится марафет.
Но в начальном проекте галочку я не ставил, по этому пришлось добавлять его ручками.
Все очень легко и просто нужно лишь настроить Gradle файл. Как это сделать хорошо расписано тут.

Строка языка

Для работы русского языка нам нужно инициализировать его символы, для этого инициализируем строку которая будет содержать все нужные нам символы.
С помощью расширения gdx-freetype можно использовать русские шрифты.
И любые другие шрифты, хоть китайский или японский.
В начале создадим строку со всеми нужными нам символами.
final String font_chars = "абвгдежзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyzАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789][_!$%#@|\\/?-+=()*&.;:,{}\"´`'<>";

2. Нам понадобится переменная типа BitmapFont для работы со шрифтами.
BitmapFont myfont;

3. Далее генерируем шрифт:
final String FONT_PATH = "arial.ttf";
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal(font/arial.ttf));
FreeTypeFontParameter parameter = new FreeTypeFontParameter();
parameter.characters = FONT_CHARS;
parameter.size = 15;
parameter.color = Color.BLACK;
font1 = generator.generateFont(parameter);
generator.dispose();

4. Для вывода текста на экран используем batch:
batch.begin();
font1.draw(batch, «Наш текст, вроде бы и не так сложно», 50, 350);
batch.end();

Примечание:
В методе Dispose не забываем добавить font1.dispose();
Что делать если не выводит кириллический текст?
Если вы уверены что Вы правильно инициализировали список символов, то есть только одна проблема которая может влиять на вывод, это кодировка самой страницы, должна быть UTF-8.

0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.