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

但这是我得到的:

为什么会这样?为什么 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() 中重新计算这些东西。 .

https://stackoverflow.com/questions/27557561/

相关文章:

git - 如何在文件末尾没有换行符的情况下列出 Git 索引中的所有文件

php - 在 app.yaml Google App Engine 中将参数传递给 php

c - Windows Shell 中的 ReadConsoleInput 缺少事件?

xaml - String.format xaml 电话号码

string - 使用 nasm 从 dx 打印十六进制

javascript - Code.gs 中的 Google Apps 脚本返回对象

c++ - 如何解锁Windows登录屏幕

java - 雅可比坐标下的椭圆曲线点加法

python - 过滤掉特定的 Python 日志消息

asp.net-mvc - 在生产环境中使用 mvc 4 中的代码优先方法添加新列