【问题标题】:How can I remove all nodes from a scenekit scene?如何从场景包场景中删除所有节点?
【发布时间】:2015-04-28 14:23:38
【问题描述】:

您好,我正在尝试从我的 Scenekit 场景中删除所有节点,但我终其一生都想不出办法。

在我看来,必须有一个自动执行此操作的功能,但我找不到它。

在上下文中,我正在尝试删除所有节点,以便我可以重置我的场景,这会经常发生。也许还有另一种方法可以做到这一点,我会很好的,我不必担心必须删除所有节点。

谢谢!

【问题讨论】:

    标签: swift nodes reset scenekit


    【解决方案1】:

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

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

    为我工作。

    【讨论】:

    • 请注意,根据 Cocoa 约定,在枚举集合(子节点)时对其进行变异是程序员的错误。我不建议这样做。
    【解决方案2】:

    对我来说,工作如下:

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

    【讨论】:

    • 您也可以跳过暂停会话
    【解决方案3】:

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

    【讨论】:

    • 我把我接受的答案从这个转移到了艾伦的答案,部分原因是他更清楚,但主要是因为它是我标记问题的快速。
    【解决方案4】:

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

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

    另外,如果你需要移除每个节点除了一些,调用这个(比如说,我们不想移除3个节点,它们被命名为abc)

    for (SCNNode *node in [self children]) {
        if (![node.name isEqualToString:@"a"] && ![node.name isEqualToString:@"b"] && ![node.name isEqualToString:@"c"]) {
            [node removeFromParent]
        }
    }
    

    希望这会有所帮助!

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        在循环中修改集合不是好的做法;这是另一种选择:

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

        【讨论】:

          【解决方案7】:

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

            self.removeAllChildren()
          

          这在 XCode 7.2 版中对我很有效

          【讨论】:

          • 现在SceneKit没有这个方法
          • 因为这不是 SceneKit 而是 SpriteKit 方法
          猜你喜欢
          • 2023-03-12
          • 2014-09-02
          • 2018-11-10
          • 2015-06-07
          • 1970-01-01
          • 1970-01-01
          • 2021-12-13
          • 2016-04-22
          • 1970-01-01
          相关资源
          最近更新 更多