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

button_music.getColor(); 그것이 변경되면 그것은보기를 새로 고치면서 sth 여야합니다. – kolboc

답변

0

사용

button_music.getImage().setColor(Color color) 

ImageButtonsetColor() 그냥 Actor에서 방법을 상속하지만 아무것도하지 않습니다.

+0

그것은 뭔가를합니다 ... 그것은 버튼의 배경 drawable 색조. – Tenfour04

0

액터의 색상이 어린이에게 계단식으로 적용되지 않습니다 (알파 성분 제외). 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; 

SpriteDrawable 대신 TextureRegionDrawable을 사용해야합니다. 훨씬 가벼운 가벼운 객체이기 때문에 버튼에 Sprite의 추가 오버 헤드가 필요하지 않습니다.

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