Как удалить или ноль дочерних узлов из родительского SCNNode? - PullRequest
0 голосов
/ 02 февраля 2019

Я использовал сканер ARKit от Apple, чтобы отсканировать объект, чтобы я мог поместить объекты вокруг него для получения инструкций по настройке чего-либо.Я использовал функцию рендерера, чтобы сделать это своим узлом для привязки объектов вокруг этого.Я хочу создать инструкции для пользователя, поэтому, когда пользователь нажимает кнопку для «следующего шага», появляется новый узел, использующий файл .scn.Я назвал отсканированный объект ARKit как baseNode, а объекты .scn добавляю их в "objectNodes".

Проблема в том, что когда пользователь нажимает кнопку для перехода к предыдущему или следующему, я добавляю другого дочернего элемента к объектным узлам.который я не хочу.Я хочу иметь возможность удалить дочерний узел из objectNodes.У меня вопрос, если как я могу удалить дочерние узлы из SCNNode.

Я пытался использовать let temp = objectNodes.childNods, temp.removeAll (), но не позволяет мне переназначать objectNodes для temp, потому что temp становится массивом от использования .childNodes.Я хочу иметь возможность использовать тот же узел, но просто перезаписать его.

@objc func nextStep() {
        switch numberOfStep {
        case 0:
            nextStep.text = "Next Step"
            previousStep.text = ""
            addBattery()
            numberOfStep += 1
        case 1:
            nodeObjects.removeFromParentNode()
            addLANObject()
}

func addBattery () {
        let battery = insertBattery(objectName: "art.scnassets/object/screwdriver.scn")
        let battery2 = insertSecondBattery(objectName: "art.scnassets/object/screwdriver.scn")
        nodeBatteryAnimation(scene: battery)
        nodeBatteryAnimation(scene: battery2)
        objectsNodes.addChildNode(battery2)
        objectsNodes.addChildNode(battery)
        baseNode.addChildNode(nodeObjects)
}

func addLANObject () {
        let etherCord = ethernet1(objectName: "art.scnassets/object/box.scn")
        nodeAnimation(scene: etherCord)
        objectsNodes.addChildNode(etherCord)
        baseNode.addChildNode(nodeObjects)
}

Я добавил несколько операторов печати и вижу, что я добавляю больше дочерних узлов в objectNodes.Когда я использую objectNodes.removeFromParent (), он удаляет его из baseNode, но когда я перехожу к следующему шагу, я добавляю дочерний узел в objectNodes и повторно добавляю его в baseNode.Я просто хочу иметь нулевые дочерние узлы снова на объектных узлах.

1 Ответ

0 голосов
/ 02 февраля 2019

Если вы хотите удалить всех детей.

Node.children.map{$0.removeFromParentNode()}

В противном случае отфильтруйте, чтобы сначала получить childNode.

...