我正在用SceneKit开发一个场景。我有一个带有子节点的主节点:
// Main node
SCNNode* planet = [SCNNode node];
planet.geometry = [SCNSphere sphereWithRadius:2];
planet.position = SCNVector3Make(0, -3, 5);
// sub-node
SCNNode* satellite = [SCNNode node];
satellite.geometry = [SCNSphere sphereWithRadius:0.4];
satellite.position = SCNVector3Make(4, 0, 0);
[planet addChildNode:satellite];
[scene.rootNode addChildNode:planet];
我使用NSTimer来制作一些动作和一些动画。在计时器事件中,我这样做:
planetRotation + = 0.1; planet.rotation = SCNVector4Make(0,1,0,planetRotation);
但是,如果我试图获得卫星节点的位置,我总是得到相同的值。 我试图让位置节点知道卫星节点的真实位置,但没有任何变化。
当我改变父节点的旋转时,如何获得子节点的实际位置?
提前致谢
答案 0 :(得分:6)
节点的位置以其父坐标系表示。就像UIKIt / AppKit中的视图一样。如果更改视图的框架,则其子视图的框架不会更改。
你想要的是我们称之为子节点的世界变换(即它在场景的根节点的坐标系中表示的变换)。
答案 1 :(得分:5)
由于物理原因,节点的位置不会发生变化,这就是为什么你没有看到它发生变化的原因。您需要调用节点的presentationNode来获取节点在屏幕上显示的位置:
node.presentationNode.position