SKScene?没有名为" Generator"

时间:2015-03-11 18:57:31

标签: ios xcode swift skscene

我添加了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()

}

1 个答案:

答案 0 :(得分:0)

您可能需要查看以下类引用:

  

SKNode:http://goo.gl/XkWckI

     

SKSpriteNode:http://goo.gl/XFyUwb

     

SKScene:http://goo.gl/ZvOMZv

从那里有两条评论:

  • "他们都有相同的名字" :实际上,它们都没有名称(你没有设置名称属性);
  • " removeAllChildren(),他们被慢慢删除" :如果你在现场运行这个方法它应该有效。但我不明白为什么它可能会很慢,也许给我们你使用的线路代码(以及在哪里)?

之后,有几种方法可以从场景或其他节点中删除节点。你尝试过的只是其中之一(你可以通过名字寻找孩子,如果它已经设置等等)。但是如果我们想坚持你所尝试的东西,你就会收到一个错误,因为你试图迭代错误的对象。实际上,您要做的是在场景中循环子节点scene.children

所有这一切,你可能想再试一次。

我希望它有所帮助。如果没有,请评论更多细节。

修改:

self是场景:

self.removeAllChildren()

for node in self.children {
    self.removeChildrenInArray([node])
}

它是一回事。

我对你所面临的缓慢的猜测是你用willMoveFromView:方法调用它。我想您正在尝试加载相同的场景,因此您可能不会这样做:在您转到下一个场景之前(即在您使用presentScene之前删除它们)或删除它们在你去下一个场景后(即在didMoveToView内)。但是,如果你在开始时正确设置场景,你甚至不应该这样做(或者我可能错过了一些东西)。