我正在关注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
,所以看起来并不是这样。
答案 0 :(得分:0)
我已将child.removeFromParent
循环替换为单个removeAllChildren
,但行为没有明显变化。我怀疑本教程的作者并不知道这个功能是可用的。
如果您继承SKNode
并覆盖removeFromParent
,则可能会引入一些removeAllChildren
无法采取行动的自定义行为。