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

Colors 在libgdx中使用getStyle设置标签背景样式,colors,background,styles,label,libgdx,Colors,Background,Styles,Label,Libgdx,我只想更改一个标签的背景样式,它位于自己的表中,并且位于自己的层中,该层添加在堆栈中其他层的顶部。但是,当我指定它时,其他表的所有其他层中的所有标签也会被指定为该背景。我不明白为什么会这样。我使用的是libgdx0.9.8。我创建的skinLibgdx使用基本的png字体和小背景图像(这就是“白色”的来源) 这是虫子吗?为什么所有其他标签都会受到影响? 在那一行之后,我尝试将其他标签设置回黑色,但是我的lblGameMessage也设置为黑色 lblLevel = new Label("Leve

我只想更改一个标签的背景样式,它位于自己的表中,并且位于自己的层中,该层添加在堆栈中其他层的顶部。但是,当我指定它时,其他表的所有其他层中的所有标签也会被指定为该背景。我不明白为什么会这样。我使用的是libgdx0.9.8。我创建的skinLibgdx使用基本的png字体和小背景图像(这就是“白色”的来源)

这是虫子吗?为什么所有其他标签都会受到影响? 在那一行之后,我尝试将其他标签设置回黑色,但是我的lblGameMessage也设置为黑色

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

我假设您创建了一个新的标签样式:

LabelStyle labelStyle = new LabelStyle();
然后用以下内容构建标签:

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

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

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

对于
lblgamessage
lblLevel
对象,您使用哪个构造函数?很可能他们正在共享一个样式实例。用构造函数编辑了这个问题。我从未创建过LabelStyle,不太理解文档和需要它的原因。对下面给出的答案有更多的评论。很好。我只是想写同样的东西,并注意到你的答案。我没有使用那个构造函数,请参阅上面我的编辑。有一个构造函数将使用LabelStyle位图字体、颜色…我需要创建这些(BitmapFont)并使用其他构造函数吗?或者有没有一种方法可以创建一个LabelStyle,并在使用我已有的构造函数之后分配它?好吧,您正在传递一个皮肤,当您传递一个皮肤时,会在内部调用标签(text,skin.get(LabelStyle.class)),所以您仍然在传递相同的引用。最好的方法是不要传递外观传递标签(文本,新标签样式(skin.get(LabelStyle.class))。让我知道它是否有效。不,不起作用。所有标签也是这样。我仍然可以将背景指定为:lblGameMessage.getStyle().background=skinLibgdx.newDrawable?好的,您仍然在传递相同的引用。而不是:lblLevel=new Label(“级别:”,skinLibgdx.get(LabelStyle.class));do:lblLevel=new Label(“级别:”,new LabelStyle(skinLibgdx.get(LabelStyle.class)));您正在获取引用并将其传递给LabelStyle的复制构造函数,这应该会起作用。
Label label1 = new Label(new LabelStyle(labelStyle));