2016-08-14 61 views
0

我有一個ImageButton。它的紋理基本上是一個白色正方形,中間是黑色文字。我希望能夠動態更改此按鈕的顏色。問題是ImageButton.setColor不會執行任何操作。我可以在ImageButtonStyle上調用色調,但是我希望能夠稍後改變顏色,例如玩家點擊按鈕。謝謝!下面是一些代碼:Libgdx | Scene2d | ImageButton setColor不起作用

ImageButton.ImageButtonStyle style_button_music = new ImageButton.ImageButtonStyle(); 
    style_button_music.imageChecked = new SpriteDrawable(new Sprite((Texture) Game.assetManager.get("button_music.png"))); 
    style_button_music.imageUp = new SpriteDrawable(new Sprite((Texture) Game.assetManager.get("button_music.png"))); 
    style_button_music.imageDisabled = new SpriteDrawable(new Sprite((Texture) Game.assetManager.get("button_music.png"))); 

    button_music = new ImageButton(style_button_music); 
    button_music.setColor(new Color(22f/255f, 100f/255f, 255f/255f, 1f)); 

    table.setFillParent(true); 
    table.setDebug(true); 

    table.top(); 
    table.pad(100); 

    table.add(button_music).width(200).height(200); 
    stage.addActor(table); 
+0

嘗試通過button_music.getColor()檢查顏色值;如果它被改變,那麼它必須是刷新視圖 – kolboc

回答

0

使用

button_music.getImage().setColor(Color color) 

ImageButtonsetColor()只是繼承的方法從Actor但它不會做任何事情。

+0

它確實做了一些事情......它爲按鈕的背景繪製色彩。 – Tenfour04

0

演員顏色不會級聯到兒童(alpha組件除外)。由於ImageButton的圖像是Button的子圖像,圖像不會繼承Button的顏色。

但是,您目前使用它的方式,我認爲您可以使用普通的Button,並設置背景圖像。這確實有色。

style_button_music.checked = new TextureRegionDrawable(new TextureRegion(Game.assetManager.get("button_music.png"))); 
style_button_music.up = style_button_music.checked; 
style_button_music.disabled = style_button_music.checked; 

您應該使用TextureRegionDrawable而不是SpriteDrawable。這是一個輕量級的對象,並且很少需要額外的按鈕Sprites開銷。

如果您確實需要使用實際的ImageButton,並且您正在動態重新着色它,則可以繼承ImageButton的子類並使用它的act方法將它的顏色傳遞給它的子級。這樣你可以使用ColorActions。

@Override 
public void act (float delta) { 
    super.act(delta); 
    Color color = getColor(); 
    getImage().setColor(color.r, color.g, color.b, 1f); //leave opaque, alpha transferred in draw() 
}