我可以临时更改LibGDX标签的线宽吗?

我可以临时更改LibGDX标签的线宽吗?,libgdx,label,scene2d,Libgdx,Label,Scene2d,我有一个用Hiero构建的位图字体,我在scene2d标签中使用它 在单个标签实例中,我需要减少字体的线宽值,但我希望其他标签(使用相同字体)保持不变,因此它们应该保持字体的默认线宽 我试图简单地调整值,如下所示: label.getStyle().font.getData().setLineHeight(localReducedValue); //skin is the skin that you use Label myLabel = new Label(text, new LabelS

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

在单个标签实例中,我需要减少字体的线宽值,但我希望其他标签(使用相同字体)保持不变,因此它们应该保持字体的默认线宽

我试图简单地调整值,如下所示:

label.getStyle().font.getData().setLineHeight(localReducedValue);
//skin is the skin that you use

Label myLabel = new Label(text, new LabelStyle(skin.get(LabelStyle.class)));
然而,这修改了所有地方的标签——回想起来,这似乎是合乎逻辑的,因为我正在修改标签样式本身

不幸的是,像
label.setLineHeight(localReducedValue)
这样的东西不存在,因此在这一点上,我看到了两种可能的解决方案:

  • 创建字体的副本,将其线宽设置为我需要的值,并使用该字体创建单独的标签样式;或
  • 为自己编写一个实现setLineHeight的自定义标签

  • 第一个想法似乎是浪费,第二个可能有点复杂,因此我希望有一种更简单的方法来实现标签中的临时线宽。

    您可以通过执行以下操作来更改单个
    标签的
    标签样式

    label.getStyle().font.getData().setLineHeight(localReducedValue);
    
    //skin is the skin that you use
    
    Label myLabel = new Label(text, new LabelStyle(skin.get(LabelStyle.class)));
    

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

    LibGDX的核心开发人员之一Nathan Sweet善意地建议,这一点非常有效:

    覆盖标签#布局,设置行高,调用super.layout,将行高设置回原位。您需要使用布局而不是绘制,因为布局计算并缓存字形位置,所以绘制只是绘制它们


    这似乎对我不起作用。如果我修改这个新LabelStyle的线宽,那么原始字体本身在其他地方都会被修改。这会更改基础字体,使其在任何地方都可以修改。您仍然需要创建另一种字体并将其传递给
    LabelStyle
    ,因此您只需更改新字体。创建另一种字体是我的第一个想法,我在问题中提到了这一点,这是我希望避免的。:)