gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:57:14 24 4
gpt4 key购买 nike

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

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/

24 4 0