Ios 什么场景?没有名为“的成员”;发电机“;

Ios 什么场景?没有名为“的成员”;发电机“;,ios,xcode,swift,skscene,Ios,Xcode,Swift,Skscene,我添加了3个skspritenodes,如下所示: 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.siz

我添加了3个skspritenodes,如下所示:

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()删除这些节点时,它们会慢慢删除,因为它们都有相同的名称,所以每个节点都会删除1个。 我想用一个“for”函数一次性删除它们

我试过这个:

let aa = levelnode as SKSpriteNode
    for aa in scene{
        levelnode.removeFromParent
    }
但我得到了这个错误:SKScene?没有名为“Generator”的成员

使用for函数删除节点的正确方法是什么

编辑:

我在以下行中尝试了此操作,但出现了错误:

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()

}

您可能希望查看以下类引用:

SKNode:

SKSpriteNode:

场景:

从这里可以看出两点:

  • “它们都有相同的名称”:实际上,它们都没有名称(您没有设置name属性)
  • “removeAllChildren(),它们会慢慢被移除”:如果您在场景中运行了此方法,它应该会起作用。但是我不明白为什么会这么慢,也许给我们你用过的代码(以及在哪里)
之后,有几种方法可以从场景或其他节点中移除节点。您尝试的部分是其中之一(如果设置了child,您可以按名称查找它,等等)。但是,如果我们想坚持您所尝试的,那么您将得到一个错误,因为您试图在错误的对象上进行迭代。实际上,您要做的是在场景子节点上循环
scene.children

有了这些,你可能想再试一次

我希望这有帮助。如果没有,请详细评论

编辑:

self
为场景:

self.removeAllChildren()

是一样的

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

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