Я ищу способ отображения текста постепенно с помощью libgdx, но я не могу найти способ сделать это именно так, как я хочу. Вот что я сделал:Показать текст с помощью libgdx
- У меня есть текстовая метка, которая периодически обновляется, чтобы отобразить другой текст. Метка устанавливается на
setWrap(true);
иsetAlignment(Align.center);
Каждый раз, когда я изменить текст метки я использую пользовательское действие, которое я построил как этот
public class DisplayTextAction extends TemporalAction{ private CharSequence completeText; @Override protected void update(float percent) { ((Label)actor).setText( completeText.subSequence( 0, (int)Math.round(completeText.length()*percent)); } public void setText(String newText){ completeText = newText; } }
- Каждый текст обновления, я называю действие из пула, измените текст и добавьте действие к метке.
Вот моя проблема: это не работает так, как я хочу, с помощью центрированного и обернутого текста.
Это происходит, когда текст не по центру (точки представляют собой пространство):
|h........|
|hel......|
|hello....|
(Работы по назначению)
Это то, что происходит, когда текст центрируется:
|....h....|
|...hel...|
|..hello..|
И вот как я хочу себя вести:
|..h......|
|..hel....|
|..hello..|
Моя первоначальная идея исправить это состояла в том, чтобы использовать 2 набора строк, один из которых является видимым текстом, и один невидимый, который действует как «заполнение». Я придумал что-то вроде этого:
CharSequence visibleText = completeText.subSequence(
0,
(int)Math.round(completeText.length()*percent));
CharSequence invisibleText = completeText.subSequence(
(int)Math.round(completeText.length()*percent),
completeText.length());
Так у меня есть мои два набора строк, но я не могу найти способ отображения двух различных шрифтов (один видимый, и другой, который является тем же самым, но с альфа 0) или стилей на одной этикетке с Libgdx.
Я застрял, я не знаю, подходит ли мой подход или я должен изучить что-то совершенно другое, и если мой подход верен, я не знаю, как его контролировать, используя libgdx инструменты.
EDIT:
Я следовал инструкциям Jyro117, и я мог бы сделать большой шаг вперед, но я не мог заставить его работать с центром текста на несколько строк.
себе этот текст:
|all those lines are|
|..for a very long..|
|........text.......|
И он должен отображаться как этот
|all th.............|
|...................|
|...................|
|all those line.....|
|...................|
|...................|
|all those lines are|
|..for a ve.........|
|...................|
|all those lines are|
|..for a very long..|
|........text.......|
раствора Jyro117 дают либо
|all those lines are|
|for a very long....|
|text...............|
отображается правильно.
или
|...................|
|......all tho......|
|...................|
|...................|
|...all those lin...|
|...................|
|all those lines are|
|......for a v......|
|...................|
Спасибо за ваше решение, это работает лучше, но по-прежнему не ведет себя точно так, как я этого хочу. Я отредактирую свой пост с дополнительной информацией о том, что он делает и чего он не делает. – vaati
Я добавил код, соответствующий вашим требованиям. Это потребует от вас использовать шрифт с одним интервалом, чтобы пробелы соответствовали ширине символов. Решение для других типов шрифтов требует больших модификаций самого класса BitmapFont и того, как определяются местоположения глифов, так как вам нужно знать об окончательной компоновке текста. – Jyro117
Я вижу. Думаю, у меня нет выбора, кроме скрипки с битмапфоном. Я отправлю сообщение снова, когда найду решение. – vaati