SCNNode.removeFromParentNode() 和渲染循环

SCNNode.removeFromParentNode() and rendering loop

我有一个关于删除 SCNNode 的问题 我有一个创建 SCNNodes 的函数,当节点准备就绪时,我添加它:

scene.rootNode.addChildNode(node)

然后我用函数创建了一个新的 SCNNode,我想删除旧的并添加新的,不幸的是 SCNNode.removeFromParentNode() 不会删除旧的:

func cleanUpAndAdd(){
        for node in scene.rootNode.childNodes{
            if node.name == "object" {
                node.removeFromParentNode()
                scene.rootNode.addChildNode(object)
                object.name = "object"
            } else {
                scene.rootNode.addChildNode(object)
                object.name = "object"
            }               
        }            
    }

它只是添加和添加,从不删除...

我错过了什么?

该代码是正确的,假设您已经设置了节点名称。你没有给我们看那部分。添加 "else print node.name" 怎么样?

请注意,SCNNode.childNodes 是一个集合(数组),因此根据 Cocoa 约定,您不应在枚举时尝试对其进行变异 (SCNNode.addChildNode(_:))。如果这样做,SceneKit 会注意到生成运行时异常,但行为未定义。

所以。经过数小时的故障排除后,我意识到我正在制作的 SCNGeometry 还包含来自先前 SCNGeometry 的 SCNGeometry 源。

所以渲染和移除是正确的。