【发布时间】:2015-04-28 14:23:38
【问题描述】:
您好,我正在尝试从我的 Scenekit 场景中删除所有节点,但我终其一生都想不出办法。
在我看来,必须有一个自动执行此操作的功能,但我找不到它。
在上下文中,我正在尝试删除所有节点,以便我可以重置我的场景,这会经常发生。也许还有另一种方法可以做到这一点,我会很好的,我不必担心必须删除所有节点。
谢谢!
【问题讨论】:
标签: swift nodes reset scenekit
您好,我正在尝试从我的 Scenekit 场景中删除所有节点,但我终其一生都想不出办法。
在我看来,必须有一个自动执行此操作的功能,但我找不到它。
在上下文中,我正在尝试删除所有节点,以便我可以重置我的场景,这会经常发生。也许还有另一种方法可以做到这一点,我会很好的,我不必担心必须删除所有节点。
谢谢!
【问题讨论】:
标签: swift nodes reset scenekit
试试这个(假设你使用的是 Swift):
rootNode.enumerateChildNodes { (node, stop) in
node.removeFromParentNode()
}
为我工作。
【讨论】:
对我来说,工作如下:
sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
node.removeFromParentNode() }
【讨论】:
您可以创建一个新场景或在场景rootNode 的每个子节点上调用-[SCNNode removeFromParentNode]
【讨论】:
如果您需要删除所有节点,请调用它(如果您的场景不是 self,请更改它):
for (SCNNode *node in [self children]) {
[node removeFromParent]
}
另外,如果你需要移除每个节点除了一些,调用这个(比如说,我们不想移除3个节点,它们被命名为a,b和c)
for (SCNNode *node in [self children]) {
if (![node.name isEqualToString:@"a"] && ![node.name isEqualToString:@"b"] && ![node.name isEqualToString:@"c"]) {
[node removeFromParent]
}
}
希望这会有所帮助!
【讨论】:
这是 Objective-C 中的一个解决方案(是的,它仍然存在!)
while (self.sceneView.scene.rootNode.childNodes.count) {
NSArray<SCNNode *> *nodes = self.sceneView.scene.rootNode.childNodes;
[nodes[0] removeFromParentNode];
}
【讨论】:
在循环中修改集合不是好的做法;这是另一种选择:
while let n = node.childNodes.first { n.removeFromParentNode() }
【讨论】:
我发现从场景中删除所有节点的最简单方法是:
self.removeAllChildren()
这在 XCode 7.2 版中对我很有效
【讨论】: