【问题标题】:Rotate scnnode with velocity以速度旋转 scnnode
【发布时间】:2019-09-29 21:39:00
【问题描述】:

我有一个scnnode,我用UIPanGestureRecognizer 围绕它的Y 轴旋转。这很好,但我想对化身应用惯性,这样一旦用户抬起手指,它就会继续旋转(并减慢速度),有点像你在滚动视图中所拥有的。这可能吗?

   func addMoveAvatarGestures(sceneView: SCNView) {
        let pan = gestureWithRootNode(target:self, action:#selector(rotateAvatar(_:)))
        if let scene = sceneView.scene {
            pan.rootNode = scene.rootNode
        }
        pan.maximumNumberOfTouches = 1
        pan.minimumNumberOfTouches = 1
        pan.delegate = self
        self.rotationGesture = pan
        sceneView.addGestureRecognizer(pan)
    }

    @objc func rotateAvatar(_ sender: gestureWithRootNode) {

        guard let nodeToRotate = sender.rootNode else {
            return
        }


        let translation = sender.translation(in: sender.view!)
        let xToAngle = Float(self.view.frame.width) / Float(360)
        let newAngleY = Float(translation.x) * xToAngle
        let velocity = sender.velocity(in: sender.view!)
        if (fabs(velocity.x) > fabs(velocity.y)) {
            sender.setTranslation(CGPoint.zero, in: sender.view!)
            nodeToRotate.eulerAngles.y += nodeExtensions.deg2rad(newAngleY)
        }
    }

【问题讨论】:

    标签: swift scenekit


    【解决方案1】:

    您可以使用applyTorque 来改变节点的角动量。

    它会影响节点的angularVelocity。您可以通过设置angularVelocityFactor 来约束或限制此效果。

    【讨论】:

      猜你喜欢
      • 2016-03-18
      • 2016-05-06
      • 2020-04-06
      • 1970-01-01
      • 2016-09-26
      • 2017-12-26
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多