removeAllChildren与self.children中所有节点发出'removeFromParent'?

时间:2016-03-26 21:16:46

标签: ios swift sprite-kit

我正在关注SpriteKit教程,对于SKSpriteNode的子类,他们有以下代码:

for child in children {
    child.removeFromParent()
}

为什么要使用它而不是:

removeAllChildren

?对我来说,删除AllChildren将是显而易见的选择。我知道有人要求父母将其所有孩子都搬走,另一个是要求所有孩子将自己从父母那里移走,我想知道是否有一个我遗漏的微妙之处。

有关详细信息,请参阅Ray Wenderlich教程“CatNap”,该教程是付费系列教程的一部分。代码位于SKSpriteNode的子类中的函数中,用于通过删除所有子节点(眼睛,尾部等)并用新节点替换它们来更改节点的外观。这是功能:

func wakeUp() {
    for child in children {
      child.removeFromParent()
    }
    texture = nil
    color = SKColor.clearColor()

    let catAwake = SKSpriteNode(fileNamed: "CatWakeUp")!.childNodeWithName("cat_awake")!

    catAwake.moveToParent(self)
    catAwake.position = CGPoint(x: -30, y: 100)
}

我确实想知道编写教程时removeAllChildren是否不可用,但是在iOS 7中使用SpriteKit引入了removeallChildren,所以看起来并不是这样。

1 个答案:

答案 0 :(得分:0)

我已将child.removeFromParent循环替换为单个removeAllChildren,但行为没有明显变化。我怀疑本教程的作者并不知道这个功能是可用的。

如果您继承SKNode并覆盖removeFromParent,则可能会引入一些removeAllChildren无法采取行动的自定义行为。