我添加了3个像这样的skspritenode:
var node = SKSpriteNode(imageNamed:"node1")
func addnode(){
node = SKSpriteNode(imageNamed:"node1")
node.position = CGPointMake(frame.size.width/3, frame.size.height/3)
node.size = CGSizeMake(frame.size.width/10, frame.size.height/10)
addChild(node)
node = SKSpriteNode(imageNamed:"node1")
node.position = CGPointMake(frame.size.width/5, frame.size.height/5)
node.size = CGSizeMake(frame.size.width/10, frame.size.height/10)
addChild(node)
node = SKSpriteNode(imageNamed:"node1")
node.position = CGPointMake(frame.size.width/2, frame.size.height/2)
node.size = CGSizeMake(frame.size.width/10, frame.size.height/10)
addChild(node)
}
(我创建了25个像这样的节点,但为了解释它很容易我做了3个)
现在,当我使用removeAllChildren()删除这些节点时,它们会被缓慢删除,因为它们都具有相同的名称,因此每个节点都被删除。 我想用“for”函数将它们全部删除。
我试过了:
let aa = levelnode as SKSpriteNode
for aa in scene{
levelnode.removeFromParent
}
但是我得到了这个错误:SKScene?没有名为“Generator”的成员
使用for-function删除节点的正确方法是什么?
编辑:
override func willMoveFromView(view: SKView) {
removeAllChildren()
}
我在下一行尝试了这个错误:
override func willMoveFromView(view: SKView) {
let aa = levelnode as SKSpriteNode
for levelnode in scene?.children{ // "$T4??" does not have a member named "Generator"
levelnode.removeFromparent
}
removeAllChildren()
}
答案 0 :(得分:0)
您可能需要查看以下类引用:
SKNode:http://goo.gl/XkWckI
SKSpriteNode:http://goo.gl/XFyUwb
SKScene:http://goo.gl/ZvOMZv
从那里有两条评论:
之后,有几种方法可以从场景或其他节点中删除节点。你尝试过的只是其中之一(你可以通过名字寻找孩子,如果它已经设置等等)。但是如果我们想坚持你所尝试的东西,你就会收到一个错误,因为你试图迭代错误的对象。实际上,您要做的是在场景中循环子节点scene.children
。
所有这一切,你可能想再试一次。
我希望它有所帮助。如果没有,请评论更多细节。
修改:
self
是场景:
self.removeAllChildren()
或
for node in self.children {
self.removeChildrenInArray([node])
}
它是一回事。
我对你所面临的缓慢的猜测是你用willMoveFromView:
方法调用它。我想您正在尝试加载相同的场景,因此您可能不会这样做:在您转到下一个场景之前(即在您使用presentScene
之前删除它们)或删除它们在你去下一个场景后(即在didMoveToView
内)。但是,如果你在开始时正确设置场景,你甚至不应该这样做(或者我可能错过了一些东西)。