【问题标题】:Setting Label background style with getStyle in libgdx在 libgdx 中使用 getStyle 设置标签背景样式
【发布时间】:2014-03-07 06:24:37
【问题描述】:

我只想更改一个标签的背景样式,该标签位于它自己的表格中,以及它自己的图层中,该图层添加到堆栈中的其他图层之上。但是,当我分配它时,其他表的所有其他层中的所有标签也被分配了该背景。我不明白为什么会这样。我正在使用 libgdx 0.9.8。我创建的 skinLibgdx 使用带有字体和小背景图像的基本 png(这就是“白色”的来源)。

lblGameMessage = new Label(" ", skinLibgdx.get(LabelStyle.class));  //skinLibgdx is a Skin - TextureAtlas
...
lblGameMessage.getStyle().background = skinLibgdx.newDrawable("white", 0.2f, 0.2f, 0.2f, 0.8f);

这是一个错误吗?为什么所有其他标签都会受此影响? 在该行之后,我尝试将其他标签设置回黑色,但随后我的 lblGameMessage 也设置为黑色。

lblLevel = new Label("Level: ", skinLibgdx.get(LabelStyle.class));
...
lblLevel.getStyle().background = skinLibgdx.newDrawable("white", 0, 0, 0, 1);

【问题讨论】:

  • 您为lblGameMessagelblLevel 对象使用了哪个构造函数?他们很可能正在共享一个样式实例。
  • 用构造函数编辑了问题。我从来没有创建过 LabelStyle,不太了解需要它的文档和原因。下面给出的答案有更多的 cmets。

标签: colors background styles label libgdx


【解决方案1】:

我假设你创建了一个新的 LabelStyle:

LabelStyle labelStyle = new LabelStyle();

然后构造标签:

Label label1 = new Label(labelStyle);
Label label2 = new Label(labelStyle);

现在您将 LabelStyle 对象的相同引用传递给每个标签,而不是传递 LabelStyle 的副本。因此,当您更改其中一个标签的样式时,您实际上是在更改所有标签所引用的 LabelStyle。一个简单的解决方案是将 LAbelStyle 的副本传递给每个标签:

Label label1 = new Label(new LabelStyle(labelStyle));

这称为复制构造函数,它将传递 LabelStyle 的副本而不是实际引用。

【讨论】:

  • 好一个。只是想写同样的,并注意到你的答案。
  • 我没有使用该构造函数,请参阅上面的编辑。有一个构造函数将使用 LabelStyle 位图字体、颜色……我需要创建那些 (BitmapFont) 并使用其他构造函数吗?或者有没有办法创建一个 LabelStyle 并在使用我已经拥有的构造函数后分配它?
  • 好吧,你传递的是一个皮肤,当你传递一个皮肤时,内部调用了 Label(text, skin.get(LabelStyle.class)),所以你仍然传递相同的引用。最好的方法是不要传递皮肤通道 Label(text, new LabelStyle(skin.get(LabelStyle.class))。让我知道它是否有效。
  • 不,没用。所有的标签也是这样制作的。我还能将背景指定为: lblGameMessage.getStyle().background = skinLibgdx.newDrawable 吗?
  • 好的,你仍然在传递相同的引用。而不是: lblLevel = new Label("Level: ", skinLibgdx.get(LabelStyle.class));做: lblLevel = new Label("Level: ", new LabelStyle(skinLibgdx.get(LabelStyle.class)));您正在获取引用并将其传递给 LabelStyle 的复制构造函数,这应该可以工作。
猜你喜欢
  • 2019-04-07
  • 2016-07-24
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 2012-09-05
  • 2018-06-01
相关资源
最近更新 更多