2017-08-19 3 views
1

J'ai une classe lettre comme ceci:libGDX incapable d'accomplir l'action

class Letter : Label { 
    val char: Char 
    var interactable = true 
    constructor(char: Char) : super(""+char, H.letterStyle()) { 
     this.char = char 
    } 

    fun animateSelect() { 
     addAction(Actions.scaleTo(3.0f, 3.0f, 0.5f)) 
    } 
    fun animateUnselect() { 
     addAction(Actions.scaleTo(3.0f, 3.0f, 0.5f)) 
    } 
} 

Dans mon écoute tactile, je ceci:

override fun touchDown(event: InputEvent?, x: Float, y: Float, pointer: Int, button: Int): Boolean { 

     var currentInteractingLetter: Letter? = null 
     for (letter in letterList) { 
      if (letter.bound.contains(x, y)) { 
       currentInteractingLetter = letter 
       break 
      } 
     } 

     if (currentInteractingLetter == null) { 

     } else { 
      selectedLetters.add(currentInteractingLetter) 
      currentInteractingLetter.animateSelect() 
      currentInteractingLetter.interactable = false 
     } 

     return true 
    } 

La logique est assez simple. Lorsque l'utilisateur touche l'un des letter s, j'appelle la fonction animateSelect(). Lorsque je l'ai exécuté, animateSelect a été appelé, mais il n'y a pas d'effet scaleUp. J'ai essayé d'effacer toutes les actions avant addAction mais toujours la même chose.

Répondre

1

Les étiquettes ne prennent pas directement en charge la mise à l'échelle.

Le moyen le plus simple de résoudre ce problème est de placer l'étiquette dans un Container, setTransform(true) sur le conteneur et d'ajouter votre action d'échelle au Container.

val container= Container<Label>().apply { 
    isTransform=true 
    actor=label   // Set your Label to container 
} 

container.addAction(Actions.scaleTo(3.0f, 3.0f, 0.5f))