Im пытается удалить SKSpriteNodes из родителя, "self". Я создаю узлы через цикл 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")!
}
}
не очевидно? У вас есть одна переменная starNode, которая содержит ссылку на один спрайт, поэтому вы можете удалить только один спрайт (тот, который был создан последним). Вам понадобится массив или пометьте ваши спрайты, а затем перечислите их с помощью функции поиска узлов. – LearnCocos2D
Как удалить все спрайты? –
Вы можете назначить имя спрайтам с помощью starNode.name = "starNode", а затем удалить спрайты с let node = self.childNodeWithName ("starNode") и node? .removeFromParent() – 0x141E