我可以临时更改 LibGDX Label lineHeight 吗?

Can I change LibGDX Label lineHeight temporarily?

我有一个用 Hiero 构建的位图字体,我在 scene2d 标签中使用它。

在单个 Label 实例中,我需要减小字体的 lineHeight 值,但我想保持其他 Label(使用相同字体)不变,因此它们应保持字体的默认 lineHeight。

我试过像这样简单地调整值:

label.getStyle().font.getData().setLineHeight(localReducedValue);

但是,这已经修改了所有地方的所有标签 -- 回想起来,这似乎是合乎逻辑的,因为我正在修改 LabelStyle 本身。

不幸的是 label.setLineHeight(localReducedValue) 之类的东西不存在,所以此时我看到两个可能的解决方案:

  1. 创建一个字体副本,将其lineHeight设置为我需要的值,并使用该字体创建一个单独的LabelStyle;或
  2. 为自己写一个实现 setLineHeight 的自定义标签。

第一个想法似乎很浪费,第二个可能有点复杂,所以我希望有一种更简单的方法来实现标签中的临时 lineHeight。

您可以通过执行以下操作来更改单个 LabelLabelStyle

//skin is the skin that you use

Label myLabel = new Label(text, new LabelStyle(skin.get(LabelStyle.class)));

然后就可以在不影响所有标签的情况下修改样式了。

Nathan Sweet,LibGDX 的核心开发人员之一,亲切地建议 a solution,效果很好:

Override Label#layout, set line height, call super.layout, set line height back. You need to use layout and not draw because layout computes and caches the glyph positions, draw just draws them.