2016-08-14 4 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

попробуйте проверить значение цвета кнопкой_music.getColor(); если он изменен, тогда он должен быть обновлен. – kolboc

ответ

0

Использование

button_music.getImage().setColor(Color color) 

setColor() на ImageButton только унаследовал метод от Actor но ничего не делает.

+0

Он что-то делает ... он оттеняет фон, который можно отрисовать на кнопке. – Tenfour04

0

Цвет актера не каскадируется до детей (кроме альфа-компонента). Поскольку Image of ImageButton является дочерним элементом 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() 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^