Удаление анимации после завершения - PullRequest
0 голосов
/ 09 апреля 2019

Я настроил функцию с параметрами для запуска нескольких анимаций при задании определенной строки, которая ссылается на следующую анимацию для воспроизведения. Моя проблема в том, какая анимация, которая запускается первой, будет продолжать работать на всех других узлах, которые должны анимироваться, даже если их анимация совершенно другая. Я думаю, что мне нужно удалить анимацию с соответствующим ключом, как только она будет завершена.

Попытка выполнить что-то вокруг этих строк, но, похоже, не работает с тем, как мы настроили нашу SKAction ...

run(action: SKAction, completion: removeAnimation(animationAtlas: "\(animationAtlas)"))

func removeAnimation(animationAtlas: String) {
        self.removeAction(forKey: "\(animationAtlas)")
    }

Вот наша анимационная функция.

func animate(animationAtlas: String, runOnNode: SKSpriteNode, frameTime: Double) {
        // need to remove animation after it is finished!!!!
        let textureAtlas = SKTextureAtlas(named: "\(animationAtlas).atlas")
        for i in 1...textureAtlas.textureNames.count {
            let animationName = "\(animationAtlas)-\(i)"
            animation.append(SKTexture(imageNamed: animationName))
            animateAction = SKAction.animate(with: animation, timePerFrame: frameTime, resize: true, restore: false)
        }
        let animationToRun = runOnNode.run(SKAction.repeat((animateAction), count: 1), withKey: "\(animationAtlas)")

run(action: animationToRun, completion: removeAnimation(animationAtlas: "\(animationAtlas)"))
    }

    func removeAnimation(animationAtlas: String) {
        self.removeAction(forKey: "\(animationAtlas)")
    }

Попытка выполнить что-то вокруг этих строк, но, похоже, не работает с тем, как мы настроили нашу SKAction. Ошибка в том, что мы запускаем действие с обработчиком завершения.

...