【问题标题】:Can I change LibGDX Label lineHeight temporarily?我可以临时更改 LibGDX Label lineHeight 吗?
【发布时间】:2017-05-01 16:16:30
【问题描述】:

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

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

我试着简单地调整这个值:

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

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

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

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

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

【问题讨论】:

    标签: libgdx label scene2d


    【解决方案1】:

    LibGDX 的核心开发人员之一 Nathan Sweet 好心地建议 a solution,它运行良好:

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

    【讨论】:

      【解决方案2】:

      您可以通过以下方式更改单个Label 的LabelStyle:

      //skin is the skin that you use
      
      Label myLabel = new Label(text, new LabelStyle(skin.get(LabelStyle.class)));
      

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

      【讨论】:

      • 这似乎对我不起作用。如果我为这个新的 LabelStyle 修改 lineHeight,原始字体本身就会被修改,其他任何地方。
      • 我想你使用label.getStyle().font.getData().setLineHeight(localReducedValue);。这会改变底层字体,因此它在任何地方都被修改。您仍然需要创建另一种字体并将其传递给LabelStyle,因此您只需更改新字体。
      • 创建另一种字体是我的第一个想法,我在我的问题中提到了我想避免的事情。 :)
      猜你喜欢
      • 1970-01-01
      • 2017-10-06
      • 2019-11-19
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      相关资源
      最近更新 更多