2014-11-03 72 views
1

我試圖從父母「自我」中刪除SKSpriteNode。 我每次需要更新節點數時,都會通過一個函數內部的for循環創建節點。這個節點表示玩家在遊戲中的生命數量。從父母刪除SKSpiteNode

func starsSpwan() { 
    self.starNode.removeFromParent() 
    var spaceInX:CGFloat = 0 
    for var i = 0; i<gameLife; i=i+1 { 

     starsTexture = SKTexture(imageNamed: "star") 
     starsTexture.filteringMode = SKTextureFilteringMode.Nearest 
     starNode = SKSpriteNode(texture: starsTexture) 
     starNode.zPosition = 30 
     starNode.size = CGSize(width: 30, height: 30) 
     starNode.position = CGPoint(x: CGRectGetMinX(self.frame) + 30 + spaceInX, y: CGRectGetMinY(self.frame) + 30) 
     self.addChild(starNode) 
     println(starNode) 
     spaceInX = spaceInX + 40 
    } 

} 

基本上,變量gameLife決定要添加多少顆星星。我在開始處添加self.starNode.removeFromParent() ,因爲如果玩家失去生命,我想先刪除所有3顆星,然後再添加2顆星,等等。

我的問題是,目前這隻適用於第一次用戶失去生命。節點被刪除並再次添加2個星號。但是如果玩家再次失去生命,節點不會被刪除,並且會添加一個額外的節點。儘管如此,這仍是不明顯的,因爲節點被添加到現有節點的頂部。

新的代碼仍無法正常工作

func starsSpwan() { 

    self.nodeStar.removeFromParent() 
    var spaceInX:CGFloat = 0 

    for var i = 0; i<gameLife; i=i+1 { 

     starsTexture = SKTexture(imageNamed: "star") 
     starsTexture.filteringMode = SKTextureFilteringMode.Nearest 
     starNode = SKSpriteNode(texture: starsTexture) 
     starNode.zPosition = 30 
     starNode.size = CGSize(width: 20, height: 20) 
     starNode.position = CGPoint(x: CGRectGetMinX(self.frame) + 30 + spaceInX, y: CGRectGetMinY(self.frame) + 30) 
     starNode.name = "stars" 
     self.addChild(starNode) 
     println(starNode) 
     spaceInX = spaceInX + 40 
     nodeStar = self.childNodeWithName("stars")! 

    } 

} 
+0

不是明擺着的嗎?你有一個單一的變量starNode,它擁有對一個精靈的引用,所以你只能刪除一個精靈(最後一個創建的精靈)。你需要一個數組或者標記你的精靈,然後用節點搜索功能枚舉它們。 – LearnCocos2D 2014-11-03 09:10:17

+0

如何刪除所有的精靈? – 2014-11-03 09:11:15

+0

您可以使用starNode.name =「starNode」爲精靈分配一個名稱,然後用let node = self.childNodeWithName(「starNode」)和node?.removeFromParent() – 0x141E 2014-11-03 09:17:01

回答

1

請嘗試以下...

func starsSpawn() { 
    // Remove all sprites named "stars" 
    self.enumerateChildNodesWithName("stars") { 
     node, stop in 
     node.removeFromParent(); 
    } 
    var spaceInX:CGFloat = 0 

    for var i = 0; i<gameLife; i=i+1 { 

     starsTexture = SKTexture(imageNamed: "star") 
     starsTexture.filteringMode = SKTextureFilteringMode.Nearest 
     starNode = SKSpriteNode(texture: starsTexture) 
     starNode.zPosition = 30 
     starNode.size = CGSize(width: 20, height: 20) 
     starNode.position = CGPoint(x: CGRectGetMinX(self.frame) + 30 + spaceInX, y: CGRectGetMinY(self.frame) + 30) 
     starNode.name = "stars" 
     self.addChild(starNode) 
     println(starNode) 
     spaceInX = spaceInX + 40 
    } 
}