java - libgdx scene2d 返回错误的标签高度

标签 java libgdx scene2d

我想将三个文本标签放置在屏幕上的确切特定点(在本例中是在顶部以更容易说明问题)。所以我有:

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);

但这是我得到的: wrong label positioning

为什么会这样?为什么 getPrefHeight() 不能返回标签的正确高度?如果没有它,我该如何定位标签?

最佳答案

当您更改标签的比例时,直到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() 中重新计算这些东西。 .

关于java - libgdx scene2d 返回错误的标签高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27557561/

相关文章:

java - 是否可以从您的 C++ 和 Java 代码调用 OpenGL ES?

java - 使用键映射到一系列值。字母等级与考试成绩示例

java - 从舞台上移除 Actor ?

Java:为什么这个列表落后于我的游戏 “Out of Memory”

java - 停止或中断 libGDX Scene2D 中的 Action

java - Google 云端硬盘 API v3 (java) : Deleting a resource property does not work

java - libGDX:如何处理 Tiled 对象层中 Sprite 的碰撞?

java - Scene2d 在 table 顶部添加 Actor

java - 使用 LibGDX.scene2d 中的输入进行错误条件检查

JAVA - 如何加速顺序任务