Значение альфа-канала разметки LibGDX BitmapFont

Итак, у меня есть растровый шрифт с включенной разметкой. Проблема в том, что мне нужно установить глобальное альфа-значение для всей строки текста, не устанавливая индивидуальное альфа-значение для каждого цветового кода.

Например, у меня...

"[#0000ff]это синий, [#990000]это красный"

Я бы хотел, чтобы текст шрифта исчезал на фоне, устанавливая альфа-значение. Есть ли способ сделать это без ручного разбора цветовых кодов и вставки альфа-значения в скобки?

Я также пробовал добавлять пользовательские цвета с помощью Colors.put(..), но это становится очень неуклюжим, так как мне приходится устанавливать альфа-значение для каждого цвета, который я использую, для каждой строки текста, который я рисую.


person Anuken    schedule 15.11.2015    source источник


Ответы (1)


Вам нужно будет использовать класс BitmapFontCache.

Так, например, скажем, что ваш код в настоящее время выглядит так...

    font.drawWrapped(batch, text, x, y, wrapWidth, alignment);

Замените его следующим, и вы сможете управлять альфой так, как вам нужно...

    BitmapFontCache cache = font.getCache();
    cache.clear();
    TextBounds bounds = cache.addMultiLineText(text, x, y, wrapWidth, alignment);

    // This is the useful bit!
    cache.setAlphas(alphaTransparency); 

    cache.draw(batch);

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

person Phil Anderson    schedule 16.11.2015
comment
Хорошо, это, кажется, работает отлично! Спасибо! [примечание: я использую GDX 1.7, поэтому это просто cache.addText] - person Anuken; 16.11.2015