施加力后的ARKit获取节点的位置

时间:2018-09-29 06:55:09

标签: ios swift scenekit arkit

与问题how to track the position of a node after applying force in Arkit 1.5类似的问题,但未得到答复,所以我要添加新问题

我在其中施加力的节点(SCNSphere)中。节点具有dynamic个物理主体。滑动时,我使用SCNNodephysicsBody?.applyForce施加力 一切都很好

问题是在施加力后,dynamic的身体不断下降,我想跟踪该位置

renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval)上打印position的{​​{1}},但是每次都显示相同的位置,为什么Y位置随着向下而没有减小?

SCNNode <SCNNode: 0x280f29500 'ball' pos(-0.165368 0.3 -0.809096) | geometry=<SCNSphere: 0x280619380 | radius=0.150> | no child> <SCNNode: 0x280f29500 'ball' pos(-0.165368 0.2 -0.809096) | geometry=<SCNSphere: 0x280619380 | radius=0.150> | no child>

等等?

我如何添加节点

<SCNNode: 0x280f29500 'ball' pos(-0.165368 0.1 -0.809096) | geometry=<SCNSphere: 0x280619380 | radius=0.150> | no child>

问题如何在施加力后跟踪SCNNode的世界位置?

1 个答案:

答案 0 :(得分:1)

我找到了非常简单的解决方案

open var presentation: SCNNode { get }

SCNNode的此属性将为您提供当前节点的显示

所以最终ballNode.presentation.position将为您提供所有动画(力)的节点当前位置

来自Apple Docs

  

当您使用隐式动画(请参见SCNTransaction)更改节点的属性时,即使动画节点的内容似乎已从旧的属性值过渡到新的属性,这些节点属性也会立即设置为其目标值。在动画过程中,SceneKit会维护一个称为表示节点的节点的副本,该节点的属性反映了由当前影响该节点的任何进行中的动画确定的瞬时值。

希望对发现类似问题的人有帮助