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

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:

27%20PM

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

Ok, j’ai trouvé une solution… Mais je ne comprends pas pourquoi je dois faire ça… Si quelqu’un a une explications, je suis preneur!

Bonne soirée,

Alexandre

Euh … * se gratte la tête *

Comme tu dis…
J’ai lu quelque part que parfois l’objet était mis sur pause, et que donc on pouvait faire .isPaused = false, mais je n’en sais pas plus…

EDIT: https://stackoverflow.com/questions/48040944/skaction-only-runs-after-sleep-or-while-running-debugger
EDIT: https://stackoverflow.com/questions/47615847/xcode-9-1-and-9-2-referenced-sprites-are-not-executing-actions-added-in-scen?rq=1