在 Swift 中删除节点之前,无法 运行 SKAction 序列

Cannot run SKAction sequence before nodes are removed in Swift

我正在尝试 运行 精灵从我的场景中移除时的序列。

我添加了一个布尔值 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")
            }
       }
    }

}

在这种情况下您可以使用一个重要的 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

立即设置(它不知道您的等待循环)。 运行 它与布尔值必须在等待

之后设置
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])