繁体   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