将SCNAction应用于SceneKit

时间:2015-06-03 12:58:01

标签: swift constraints scenekit

我有一个有约束的节点;更具体地说,它有一个SCNLookAtConstraint:

    let constraint = SCNLookAtConstraint(target: scene.retriveNodeFromScene(cameraNodeName))
    constraint.gimbalLockEnabled = false
    self.constraints = [constraint]

但是当我想将节点移动到其他坐标时,它就不会移动。我没有收到任何错误,只是没有任何反应。我做了一些测试,如果我删除约束,一切正常,节点移动没有问题。所以我该怎么做?有没有解决我的问题的方法,还是我应该找到另一种方式,相当于我的约束,但也兼容SCNAction?

行动代码:

    let timeForAction = calculateTimerForSecoundAction()
    let action = SCNAction.moveTo(calculateEndingLocation(), duration: timeForAction)
    let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(NSEC_PER_SEC * timeForAction))
    self.runAction(action)
    explodeAfterReachingFinalPosition(timeForAction)

2 个答案:

答案 0 :(得分:1)

您可以创建一个新的中间节点,将其用于该操作,并将当前节点作为具有lookAt约束的子节点。

答案 1 :(得分:1)

与原始海报相同的问题。 我用MNAUGES的建议解决了这个问题。

' LookAt'约束中断/阻止SCNAction在视图中发生。有趣的是,相机节点WAS移动 - 根据控制台 - 只是没有在视图中更新。我还可以在视图中移动摄像机节点,更改为cameraNode.position = newPosition - 但没有很好的动画过渡。

将您的cameraNode命名为emptyNode。将lookAt约束分配给cameraNode,将moveTo SCNAction分配给emptyNode。