如何从 scenekit 场景中删除所有节点?
How can I remove all nodes from a scenekit scene?
您好,我正在尝试从我的 Scenekit 场景中删除所有节点,但我无法为我的生活找到一种方法。
在我看来,必须有一个自动执行此操作的功能是合乎逻辑的,但我找不到它。
在上下文中,我正在尝试删除所有节点,以便我可以重置我的场景,这种情况经常发生。也许还有另一种方法可以做到这一点,我会很好,我不会被必须删除所有节点所困扰。
谢谢!
您可以创建新场景或在场景 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]
}
}
希望对您有所帮助!
试试这个(假设您使用的是 Swift):
rootNode.enumerateChildNodes { (node, stop) in
node.removeFromParentNode()
}
适合我。
我发现从场景中删除所有节点的最简单方法是:
self.removeAllChildren()
这在 XCode 版本 7.2
中对我来说效果很好
我的工作如下:
sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
node.removeFromParentNode() }
这是 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() }
您好,我正在尝试从我的 Scenekit 场景中删除所有节点,但我无法为我的生活找到一种方法。
在我看来,必须有一个自动执行此操作的功能是合乎逻辑的,但我找不到它。
在上下文中,我正在尝试删除所有节点,以便我可以重置我的场景,这种情况经常发生。也许还有另一种方法可以做到这一点,我会很好,我不会被必须删除所有节点所困扰。
谢谢!
您可以创建新场景或在场景 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]
}
}
希望对您有所帮助!
试试这个(假设您使用的是 Swift):
rootNode.enumerateChildNodes { (node, stop) in
node.removeFromParentNode()
}
适合我。
我发现从场景中删除所有节点的最简单方法是:
self.removeAllChildren()
这在 XCode 版本 7.2
中对我来说效果很好我的工作如下:
sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
node.removeFromParentNode() }
这是 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() }