Невозможно запустить последовательность SKAction до удаления узлов в Swift - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь запустить последовательность при удалении спрайтов с моей сцены.

Я добавил логическое fruitScaled, чтобы попытаться разбить последовательность, и SKAction.wait, чтобы анимация завершилась до удаления. Спрайты удаляются со сцены, но анимация не запускается, спрайты удаляются мгновенно.

Как мне заставить SKAction работать на спрайтах до того, как они будут удалены со сцены?

var fruitScaled = false

func removeFruit() {
    // Removing Specific Children
    self.enumerateChildNodes(withName: "fruitButton") {
           (node, stop) in
        if node.name == "fruitButton" {
            if self.fruitScaled == false {
                let scale = SKAction.scale(to: 1, duration: 0.5)
                let wait = SKAction.wait(forDuration: TimeInterval(0.5))
                let sequence = SKAction.sequence([scale, wait])
                node.run(sequence)
                print("Fruit scaled down")

                self.fruitScaled = true
            }

            if self.fruitScaled == true {
                node.removeFromParent();
                print("Removed old fruits")
            }
       }
    }

}

1 Ответ

1 голос
/ 27 апреля 2020

есть важный SKAction, который вы можете использовать в этом случае

let scale = SKAction.scale(to: 1, duration: 0.5)
let wait = SKAction.wait(forDuration: TimeInterval(0.5))
let remove = SKAction.removeFromParent()
let sequence = SKAction.sequence([scale, wait, remove])
node.run(sequence)

, если он не существует, вы можете запустить его в блоке

let scale = SKAction.scale(to: 1, duration: 0.5)
let wait = SKAction.wait(forDuration: TimeInterval(0.5))

let blowup = SKAction.run { self.blowUp() }

let sequence = SKAction.sequence([scale, wait, blowup])
node.run(sequence)

К вашему сведению проблема с вашим Код выше заключается в том, что

self.fruitScaled = true

устанавливается немедленно (он не знает о вашем ожидании l oop). Чтобы запустить его с логическим значением, он должен быть установлен после ожидания

let scale = SKAction.scale(to: 1, duration: 0.5)
let wait = SKAction.wait(forDuration: TimeInterval(0.5))
let change = SKAction.run { self.fruitScaled = true }
let sequence = SKAction.sequence([scale, wait, change])
...