2014-11-03 45 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 
    } 
}