SpriteKit - Animation d’un SKNode ne fonctionne qu’avec un sleep(2) ou breakpoint

AlesckAlesck Membre

Bonjour tout le monde,

J’essaye d’associer une animation à un de mes noeuds (Node) dans ma scène spritekit, lorsque je touche l’écran.

La fonction est bien appelée, mais l’animation ne fait rien … sauf si je mets un sleep(2) ou un breakpoint…

J’en ai donc conclus que lors de l’exécution de mon animation, mon objet n’était pas prêt, et donc l’animation ne prenait pas effet. Mais pourquoi… ? Aucune idée jusqu’à présent…

Voici mon code:

Ma GameScene:

class GameScene: SKScene {

    private var player: Character?

    override func didMove(to view: SKView) {
        super.didMove(to: view)
        initPlayer()
    }

    private func initPlayer() {
        if let char = childNode(withName: "char") as? SKReferenceNode {
            player = char.children[0].childNode(withName: "character") as? Character
        }
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        player?.startRunningAnimation()
    }
}

Et ma classe Character:

class Character: SKNode {

    private var torsoLower: SKNode!
    private var torsoUpper: SKNode!
    private var head: SKNode!
    private var armUpperFront: SKNode!
    private var armUpperBack: SKNode!
    private var armLowerFront: SKNode!
    private var armLowerBack: SKNode!
    private var legUpperFront: SKNode!
    private var legUpperBack: SKNode!
    private var legLowerFront: SKNode!
    private var legLowerBack: SKNode!

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        torsoLower = childNode(withName: "torso_lower")
        torsoUpper = torsoLower.childNode(withName: "torso_upper")
        head = torsoUpper.childNode(withName: "head")
        armUpperFront = torsoUpper.childNode(withName: "arm_upper_front")
        armLowerFront = armUpperFront.childNode(withName: "arm_lower_front")
        armUpperBack = torsoUpper.childNode(withName: "arm_upper_back")
        armLowerBack = armUpperBack.childNode(withName: "arm_lower_back")
        legUpperFront = torsoLower.childNode(withName: "leg_upper_front")
        legLowerFront = legUpperFront.childNode(withName: "leg_lower_front")
        legUpperBack = torsoLower.childNode(withName: "leg_upper_back")
        legLowerBack = legUpperBack.childNode(withName: "leg_lower_back")
    }


    func startRunningAnimation() {
        let moveAction = SKAction.move(by: CGVector(dx: 200, dy: 0), duration: 2)
        legLowerFront.run(moveAction)
    }
}

Voici également la structure de GameScene.sks:

char étant un SKNodeReference vers Character.sks dont voici la structure:

Si quelqu’un a une idée, je suis preneur…

Bonne journée,

Alexandre

Réponses

Connectez-vous ou Inscrivez-vous pour répondre.