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