我有一个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);
答案 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()
}