Search code examples
buttonlibgdxkotlin

libgdx button up down no effect


val playTexture = assetManager?.get(A.image.gamePlayBtn, Texture::class.java)

val skin: Skin = Skin()
skin.add("up", TextureRegion(playTexture, 0, 0, 296, 96))
skin.add("down", TextureRegion(playTexture, 0, 96, 296, 96))

val playButton: ImageTextButton = ImageTextButton("PLAY THE GAME", with(ImageTextButton.ImageTextButtonStyle()) {
    up = skin.getDrawable("up")
    down = skin.getDrawable("down")
    font = BitmapFont()
    font.data.setScale(3f)
    font.color = Color.ORANGE
    this
})

OnClick events work ok, but there is no button background change for onClicked state(down). Where I'm wrong?


Solution

  • I've tested your code, that's working fine. Added complete text code :

    class Main : ApplicationAdapter(){
    
       internal lateinit var stage: Stage
    
       override fun create() {
    
        stage= Stage()
        stage.setDebugAll(true)
        Gdx.input.setInputProcessor(stage)
    
        var skin= Skin()
        var tex1 =Texture("badlogic.jpg")
        skin.add("up", TextureRegion(tex1, 0, 0, 100, 50))
        skin.add("down", TextureRegion(tex1, 0, 96, 100, 50))
    
        var playButton: ImageTextButton = ImageTextButton("Play The Game", with(ImageTextButton.ImageTextButtonStyle()){
    
            up = skin.getDrawable("up")
            down = skin.getDrawable("down")
            font = BitmapFont()
            font.data.setScale(3f)
            font.color = Color.ORANGE
            this
        });
    
        playButton.setPosition(0F,100F)
        playButton.addListener(object : ClickListener(){
    
            override fun clicked(event: InputEvent?, x: Float, y: Float) {
                print("clicked")
                super.clicked(event, x, y)
            }
        })
    
        stage.addActor(playButton)
      }
    
      override fun render() {
    
          Gdx.gl.glClearColor(1f, 0f, 0f, 1f)
          Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
    
          stage.draw()
          stage.act()
      }
    }