【问题标题】:SceneKit applyForce on SCNNode not workingSCNNode 上的 SceneKit applyForce 不起作用
【发布时间】:2017-02-12 02:48:44
【问题描述】:

我正在尝试在 SCNNode 上使用 SceneKit 的 applyForce 方法。应用程序正在检测何时通过触摸屏触摸特定节点,并且应该对节点施加力;但是,SCNNode 不会移动。我已经在 SCNNode 上正确地将物理设置为 dynamic,它会响应重力。

override func viewDidLoad() {

    ...

    // retrieve the floor node
    let floorNode = SCNScene(named: "art.scnassets/floor.dae")
    floorNode?.rootNode.position = SCNVector3(x: 0, y: 0, z:-10)
    floorNode?.rootNode.physicsBody = SCNPhysicsBody(type: .static, shape: nil)

    scene.rootNode.addChildNode(floorNode!.rootNode)

    let treeNode = SCNScene(named: "art.scnassets/tree.dae")
    treeNode?.rootNode.position = SCNVector3(x: 0, y: 10, z:-10)
    treeNode?.rootNode.physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)
    scene.rootNode.addChildNode(treeNode!.rootNode)

    ...

}

func handleTap(_ gestureRecognize: UIGestureRecognizer) {

    ...

    // check what nodes are tapped
    let p = gestureRecognize.location(in: scnView)
    let hitResults = scnView.hitTest(p, options: [:])
    // check that we clicked on at least one object
    if hitResults.count > 0 {

        print("A hit!")

        // retrieved the first clicked object
        let result: AnyObject = hitResults[0]

        result.node.physicsBody?.applyForce(SCNVector3(x:10000,y:1,z:1), asImpulse: true)
        result.node.physicsBody?.applyTorque(SCNVector4(x:0,y:1,z:0, w:100.0), asImpulse: true)

    }
}

【问题讨论】:

    标签: physics scenekit


    【解决方案1】:

    我试图将力施加到子节点(命中测试返回)上,而我应该将力施加到子节点的父节点。

    我是通过.DAE(Collada)文件导入SCNScenes,SCNScenes的rootNode不是模型本身,而是模型的父节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 2017-11-11
      • 2019-04-07
      • 2017-05-16
      • 2016-03-25
      • 2014-12-05
      • 2017-01-18
      相关资源
      最近更新 更多