Я настроил функцию с параметрами для запуска нескольких анимаций при задании определенной строки, которая ссылается на следующую анимацию для воспроизведения. Моя проблема в том, какая анимация, которая запускается первой, будет продолжать работать на всех других узлах, которые должны анимироваться, даже если их анимация совершенно другая. Я думаю, что мне нужно удалить анимацию с соответствующим ключом, как только она будет завершена.
Попытка выполнить что-то вокруг этих строк, но, похоже, не работает с тем, как мы настроили нашу 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. Ошибка в том, что мы запускаем действие с обработчиком завершения.