如何从scenekit场景中删除所有节点?

时间:2015-02-26 09:23:10

标签: swift nodes reset scenekit

您好我正在尝试从我的Scenekit场景中删除所有节点,但我无法为我的生活找到方法。

对我而言,似乎必须有一个自动执行此功能的功能,但我无法找到它。

在上下文中,我试图删除所有节点,以便我可以重置我的场景,这将经常发生。也许有另一种方法可以做到这一点,我会很好,我不会被迫删除所有节点。

谢谢!

7 个答案:

答案 0 :(得分:26)

试试这个(假设您使用的是Swift):

rootNode.enumerateChildNodes { (node, stop) in
        node.removeFromParentNode()
    }

适合我。

答案 1 :(得分:9)

对我来说,工作如下:

sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
node.removeFromParentNode() }

答案 2 :(得分:3)

您可以在场景的每个子节点上创建新场景或调用-[SCNNode removeFromParentNode] rootNode

答案 3 :(得分:3)

如果您需要删除所有节点,请调用此方法(如果您的场景不是self,请更改它):

for (SCNNode *node in [self children]) {
    [node removeFromParent]
}

此外,如果您需要移除除之外的每个节点,请调用此方法(例如,我们不想删除3个节点,并将它们命名为{{1 }},ab

c

希望这有帮助!

答案 4 :(得分:0)

这是Objective-C的一种解决方案(是的,它仍然存在!)

while (self.sceneView.scene.rootNode.childNodes.count) {
    NSArray<SCNNode *> *nodes = self.sceneView.scene.rootNode.childNodes;
    [nodes[0] removeFromParentNode];
}

答案 5 :(得分:0)

在循环浏览时修改集合不是一个好习惯;这是另一种选择:

while let n = node.childNodes.first { n.removeFromParentNode() }

答案 6 :(得分:-2)

我发现从场景中删除所有节点的最简单方法是:

  self.removeAllChildren()

这在XCode版本7.2中适用于我