在libgdx中使用getStyle设置标签背景样式

时间:2014-02-10 03:06:11

标签: colors background styles label libgdx

我想改变一个标签的背景样式,它在自己的表中,并且在它自己的层中,它在堆栈中的其他层上添加。但是,当我分配它时,其他表的所有其他层中的所有标签也会被分配该背景。我不明白为什么会这样。我使用的是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);

1 个答案:

答案 0 :(得分:7)

我假设你创建了一个新的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的副本而不是实际引用。