我可以临时更改LibGDX标签的线宽吗?
我有一个用Hiero构建的位图字体,我在scene2d标签中使用它 在单个标签实例中,我需要减少字体的线宽值,但我希望其他标签(使用相同字体)保持不变,因此它们应该保持字体的默认线宽 我试图简单地调整值,如下所示:我可以临时更改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
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)
这样的东西不存在,因此在这一点上,我看到了两种可能的解决方案:
第一个想法似乎是浪费,第二个可能有点复杂,因此我希望有一种更简单的方法来实现标签中的临时线宽。您可以通过执行以下操作来更改单个
标签的标签样式
:
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
,因此您只需更改新字体。创建另一种字体是我的第一个想法,我在问题中提到了这一点,这是我希望避免的。:)