【问题标题】:How to remove scnplane when touching again?再次触摸时如何删除scnplane?
【发布时间】:2019-03-06 04:06:04
【问题描述】:

当用户点击飞机时,我可以添加新的 scnplane。但是现在,点击同一个 scnplane,它会再次添加新的 scnplane,而不是删除。

最初检测到参考图像时,它会在菜单卡的一侧列出蛋糕的图像、名称和评分。用户点击评分,它将列出用户评分。

这是我尝试过的代码:

  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    //1. Get The Current Touch Location & Perform An ARSCNHitTest To Check For Any Hit SCNNode's
    guard let currentTouchLocation = touches.first?.location(in: self.sceneView),
        let hitTestNode = self.sceneView.hitTest(currentTouchLocation, options: nil).first?.node else { return }


    if let lableName = hitTestNode.name {
        print("touch working")
        if lableName == "lableNode"{


            makeCakeOnNode(hitTestNode)



        } else if lableName == "AllLabelNode" {

            makeCakeOnNode1(hitTestNode)

        } else if lableName == "fruitNode" {

            makeCakeOnNode2(hitTestNode)

        }

    }
}


func makeCakeOnNode(_ node: SCNNode){

    let planeGeometry = SCNPlane(width: 0.18  , height: 0.15)

    planeGeometry.firstMaterial?.diffuse.contents = UIColor.black.withAlphaComponent(0)




    planeNode0 = SCNNode(geometry: planeGeometry)
    planeNode0?.runAction(SCNAction.moveBy(x: -0.2, y: -0.15, z: 0, duration: 0))

                    let overlayNode = self.getNode(withImageName: "menu")
                    print("overlay::\(overlayNode)")

    let newPlane = SCNPlane(width: 0.15, height: 0.10)
    newPlane.firstMaterial?.diffuse.contents = UIImage(named: "cake_detail")

    let newPlaneNode = SCNNode(geometry: newPlane)
    newPlaneNode.eulerAngles.x = -.pi / 2
    newPlaneNode.runAction(SCNAction.moveBy(x: -0.2, y: -0.15, z: 0, duration: 0))

    node.addChildNode(planeNode0!)
    planeNode0?.addChildNode(overlayNode)
    planeNode0?.addChildNode(newPlaneNode)
    if planeBool == true {

        planeNode1?.isHidden = true
        planeNode2?.isHidden = true
        planeNode0?.isHidden = false
        planeBool = false

    } else {

        print("plane removed")
        planeNode0?.isHidden = true
        planeNode1?.isHidden = true
        planeNode2?.isHidden = true

        planeBool = true
    }


}

【问题讨论】:

    标签: ios swift xcode arkit


    【解决方案1】:

    您可以使用的一种方法是为您添加的每个节点创建一个全局变量,例如:

     var labelNode: SCNNode?
     var allLabelNode: SCNNode?
     var fruitNode: SCNNode?
    

    然后你可以进行测试看看他们是否是nil。如果节点是nil,则创建它,否则删除它,例如:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    
        //1. Get The Current Touch Location & Perform An ARSCNHitTest To Check For Any Hit SCNNode's
        guard let currentTouchLocation = touches.first?.location(in: self. self.sceneView),
            let hitTestNode = self.sceneView.hitTest(currentTouchLocation, options: nil).first?.node
            else { return }
    
        //2. Enumerate The Nodes We Have By Name
        switch hitTestNode.name {
        case "lableNode":
    
            //1. If The LabelNode Doesnt Exist Create It
            if labelNode == nil{
                //Create The Node Here
            }else{
               labelNode?.removeFromParentNode()
               labelNode = nil
            }
    
        case "AllLabelNode":
    
            //2. If The LabelNode Doesnt Exist Create It
            if allLabelNode == nil{
                //Create The Node Here
            }else{
                allLabelNode?.removeFromParentNode()
                allLabelNode = nil
            }
    
        case "fruitNode":
    
            //3. If The LabelNode Doesnt Exist Create It
            if fruitNode == nil{
                //Create The Node Here
            }else{
                fruitNode?.removeFromParentNode()
                fruitNode = nil
            }
    
        default:
            return
        }
    
    }
    

    请注意,Touches 方法可能应该被重构,但它应该足以为您指明正确的方向......

    【讨论】:

      猜你喜欢
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多