2016-03-26 50 views
-3

我下面一個SpriteKit教程,和一個子類SKSpriteNode的,它們具有以下代碼:removeAllChildren與爲self.children中的所有節點發出'removeFromParent'?

for child in children { 
    child.removeFromParent() 
} 

爲什麼用這個來代替:

removeAllChildren 

?對我而言,removeAllChildren將是明顯的選擇。我知道有人要求父母將所有的孩子都帶走,另一方面是要求所有的孩子將自己從父母身上移開,我想知道我是否缺少一種微妙的東西。

有關詳細信息,請參閱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不可用時,教程編寫的,但removeallChildren與SpriteKit推出iOS中  7,這樣就不會出現吧。

+2

沒有理由,作者可能只是不知道(或忘記)關於'removeAllChildren'。這在編程中總是會發生,這就是爲什麼我們有代碼評論。 – Sulthan

回答

0

我已將child.removeFromParent迴路替換爲單個removeAllChildren,但行爲沒有明顯變化。我懷疑教程的作者只是不知道這個函數是可用的。

如果您繼承SKNode並覆蓋removeFromParent,可能會引入一些removeAllChildren不會執行的自定義行爲。

相關問題