我正在寻找一种使用 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..|
我解决这个问题的最初想法是使用两组字符串,一组是可见文本,一组是不可见的充当“填充”。我想出了这样的事情:
CharSequence visibleText = completeText.subSequence(
0,
(int)Math.round(completeText.length()*percent));
CharSequence invisibleText = completeText.subSequence(
(int)Math.round(completeText.length()*percent),
completeText.length());
所以我有两组字符串,但我找不到一种方法来显示两种不同的字体(一种是可见的,另一种是相同的,但 alpha 为 0)或与 Libgdx 相同的标签中的样式。
我被困住了,我不知道我的方法是否正确,或者我是否应该研究一些完全不同的东西,如果我的方法是正确的,我不知道如何使用 libgdx 工具跟进它。
编辑:
我按照 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......|
|...................|