Libgdx | Scene2d | ImageButton setColor无法正常工作

时间:2016-08-14 19:30:52

标签: java android libgdx scene2d

我有一个ImageButton。它的纹理基本上是一个白色方块,中间是黑色文字。我希望能够动态更改此按钮的颜色。问题是ImageButton.setColor没有做任何事情。我可以在ImageButtonStyle上调用色调,它可以正常工作,但我希望能够在以后的路上更改颜色,例如玩家点击按钮。谢谢!这是一些代码:

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

2 个答案:

答案 0 :(得分:0)

使用

button_music.getImage().setColor(Color color)

setColor()上的ImageButton只是来自Actor的继承方法,但它没有做任何事情。

答案 1 :(得分:0)

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()
}