libgdx场景2d返回错误的标签高度

3

我希望在屏幕上的一个特定位置放置三个文本标签(在这种情况下,为了更容易说明问题,放在顶部)。所以我有以下内容:

LabelStyle labelStyle = new LabelStyle(new BitmapFont(), new Color(1,1,1,1));

Label textFullSize = new Label("Line 1 of 4\nLine 2 of 4\nLine 3 of 4\nLine 4 of 4", labelStyle);
textFullSize.setFontScale(1);
textFullSize.setPosition(0, Gdx.graphics.getHeight()-textFullSize.getPrefHeight());
stage.addActor(textFullSize);

Label textHalfSize = new Label("Line small 1 of 4\nLine small 2 of 4\nLine small 3 of 4\nLine small 4 of 4", labelStyle);
textHalfSize.setFontScale(0.5f);
textHalfSize.setPosition(Gdx.graphics.getWidth()*0.15f, Gdx.graphics.getHeight()-textHalfSize.getPrefHeight());
stage.addActor(textHalfSize);       

Label textDoubleSize = new Label("Line large 1 of 4\nLine large 2 of 4\nLine large 3 of 4\nLine large 4 of 4", labelStyle);
textDoubleSize.setFontScale(2);
textDoubleSize.setPosition(Gdx.graphics.getWidth()*0.25f, Gdx.graphics.getHeight()-textDoubleSize.getPrefHeight());
stage.addActor(textDoubleSize);

但这里是我得到的结果: 错误的标签定位 为什么会发生这种情况?为什么getPrefHeight()不能返回标签的正确高度?我该如何在没有它的情况下定位标签?
1个回答

0

当您更改标签的比例时,其新大小不会自动调用,直到调用stage.act()。这是为了避免浪费大量计算重新计算所有内容的大小,如果您进行多个影响大小的更改。

但是,您可以通过在标签上调用layout()来强制更新其大小。然后,当您调用getPrefHeight()时,您将获得正确的值。例如:

Label textHalfSize = new Label("Line small 1 of 4\nLine small 2 of 4\nLine small 3 of 4\nLine small 4 of 4", labelStyle);
textHalfSize.setFontScale(0.5f);
textHalfSize.layout();
textHalfSize.setPosition(Gdx.graphics.getWidth()*0.15f, Gdx.graphics.getHeight()-textHalfSize.getPrefHeight());
stage.addActor(textHalfSize);  

一般来说,这并不浪费,因为它会在内部将其布局标记为已更新,所以在大多数情况下,它不必在 stage.act() 中重新计算这些内容。

这没有任何影响。在调用layout()之前和之后,getPrefHeight()返回相同(不正确)的值。 - TimSim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接