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 源。
所以渲染和移除是正确的。
我有一个关于删除 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 源。
所以渲染和移除是正确的。