2014-02-10 28 views
3

我想更改一個標籤的背景樣式,該標籤位於其自己的表中,並且位於其自己的層中,該層添加到其他層中的頂層。但是,當我分配它時,其他所有其他圖層中的所有標籤也會分配該背景。我不明白爲什麼會發生。我正在使用libgdx 0.9.8。我創建的skinLibgdx使用基本的png,包含字體和小背景圖像(這就是「白色」的來源)。在libgdx中使用getStyle設置標籤背景樣式

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

你正在使用'lblGameMessage'和'lblLevel'對象的構造函數嗎?它很可能共享一個樣式實例。 –

+0

用構造函數編輯問題。我從來沒有創建LabelStyle,也不太瞭解需要文檔和原因。下面給出的答案更多評論。 –

回答

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的副本,而不是實際的參考。

+0

不錯的一個。只是想寫同樣的東西,並注意到你的答案。 – BennX

+0

我沒有使用該構造函數,請參閱上面的編輯。有一個構造函數將使用LabelStyle位圖字體Color ...我是否需要創建這些(BitmapFont)並使用其他構造函數?或者有沒有辦法創建一個LabelStyle並在使用我已有的構造函數之後進行賦值? –

+0

嗯,你傳遞一個皮膚,當你傳遞一個皮膚Label(文本,皮膚.get(LabelStyle.class))時,你會傳遞相同的引用。最好的方法是不通過皮膚傳遞標籤(文本,新的LabelStyle(skin.get(LabelStyle.class))。讓我知道它是否有效 – danielz

相關問題