2016-10-23 5 views
1

Если у меня есть bitmapfont, например;Как получить естественный шрифт bitmapfont?

fonttexture = new Texture(Gdx.files.internal("data/fonttest.png"), true); 
font= new BitmapFont(Gdx.files.internal("data/fonttest.fnt"), 
        new TextureRegion(fonttexture), true); 

Возможно ли получить или вывести естественный шрифт, используемый в связанном файле текстуры png? Файл * .fnt сам определяет это в первой строке;

info face="Calibri Light" size=32 bold=0 italic=0 charset="" 

Сво что Я после того, как в коде. Я не мог видеть метод в классе BitmapFonts, чтобы получить его прямо, но было возможно получить другие атрибуты, связанные с ростом.

Я пробовал воссоздать размер от тех, но не имел большой удачи.

float baseToAssent = font.getCapHeight()+font.getAscent(); 
float baseToDecent = -font.getDescent();Decent);    
float fontHeight = baseToAssent+baseToDecent; //too small, like 11 not 32 

Не является шрифтографом? fontophile? ... umm ... графический дизайнер, я, вероятно, неправильно собираю штуки или, возможно, просто не хватает одного.

В любом случае, в любом случае поможет определить размер шрифта, используемый в fonttest.png.

Благодаря

USECASE;

Я вручную использую эту текстуру с полевым шейдером. Знание естественного размера шрифтов текстур полезно для точного масштабирования текста и линейного фона до любого требуемого размера шрифта без изменения размера изображения и, следовательно, потери качества.

ответ

0

Не знаю, как получить размер шрифта специфическим, однако вы можете легко получить ширину Струнной и высоту шрифта с помощью GlyphLayout, например:

BitmapFont font = new BitmapFont(Gdx.files.internal("data/fonttest.fnt", false); 

    GlyphLayout glyph = new GlyphLayout(font, "TextMessage"); 
    float width = glyph.width; 
    float height = glyph.height; 

Прочитайте эту topic, если вы хотите, чтобы узнать больше о GlyphLayout и BitmapFont. Экспериментировало совсем немного с 32-кратным шрифтом, похожим на ваш. Строка «W» показалась шириной 29px, что было самым широким, что я мог найти, поэтому определенно неточно, если вы хотите архивировать размер точно.

Вы можете сделать небольшой хакерский метод, прочитав файл .fnt в виде текстового файла и ищите Integer после «size =», в значительной степени похожий на работу файла properties, он будет менее эффективным, но вернет точное значение ,

+0

Действительно. Сначала я попробовал что-то подобное с такими же результатами. Поскольку я буду повторно использовать этот код, честный бит, я старался быть максимально точным, поэтому мне, возможно, придется использовать хакерский метод. – darkflame

+0

Немного окунулся и нашел 'getLineHeight()' в BitmapFont, он возвращает «высоту строки, которая является расстоянием от одной строки текста до следующей». Результаты в 32px шрифте 32. И в 16px я получил 16. – Squiddie

+0

Да, это похоже на работу. Должен быть осторожным, используя его, хотя, как вы можете (и я), также отрегулируйте линейную высоту. Таким образом, эти значения верны, если они не были изменены. Таким образом, мое (хакерское) решение поддерживает hasmap шрифтов и их собственные размеры. – darkflame