与问题how to track the position of a node after applying force in Arkit 1.5类似的问题,但未得到答复,所以我要添加新问题
我在其中施加力的节点(SCNSphere)中。节点具有dynamic
个物理主体。滑动时,我使用SCNNode
向physicsBody?.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的世界位置?
答案 0 :(得分:1)
我找到了非常简单的解决方案
open var presentation: SCNNode { get }
SCNNode
的此属性将为您提供当前节点的显示
所以最终ballNode.presentation.position
将为您提供所有动画(力)的节点当前位置
当您使用隐式动画(请参见SCNTransaction)更改节点的属性时,即使动画节点的内容似乎已从旧的属性值过渡到新的属性,这些节点属性也会立即设置为其目标值。在动画过程中,SceneKit会维护一个称为表示节点的节点的副本,该节点的属性反映了由当前影响该节点的任何进行中的动画确定的瞬时值。
希望对发现类似问题的人有帮助