簡體   English   中英

Libgdx | Scene2d | ImageButton setColor不起作用

[英]Libgdx | Scene2d | ImageButton setColor not working

我有一個ImageButton。 它的紋理基本上是一個白色正方形,中間是黑色文本。 我希望能夠動態更改此按鈕的顏色。 問題在於ImageButton.setColor不執行任何操作。 我可以在確實起作用的ImageButtonStyle上調用tint,但是我希望以后可以更改顏色,例如,如果播放器單擊了按鈕。 謝謝! 這是一些代碼:

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);

采用

button_music.getImage().setColor(Color color)

ImageButton上的setColor()只是從Actor繼承的方法,但是它什么也不做。

演員的顏色不會降級到子級(alpha分量除外)。 由於ImageButton的Image是Button的子級,因此Image不會繼承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()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM