2014-11-06 83 views
5

我正在用SceneKit開發一個場景。我有一個子節點的主節點:如何在旋轉後獲取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);

但是,如果我試圖獲得衛星節點的位置,我總是會得到相同的值。 我試圖讓positionnode知道衛星節點的真實位置,但沒有任何變化。

當我更改父節點的旋轉時,如何獲得子節點的實際位置?

在此先感謝

回答

6

節點的位置在其父座標系中表示。就像UIKIt/AppKit中的視圖一樣。如果您更改視圖的框架,其子視圖的框架不會更改。

你想要什麼就是我們所說的子節點的世界變換(即它的變換在場景的根節點的座標系中表示)。

你可以看看worldTransform-convertPosition:toNode:

3

節點的位置不會因物理而改變,這就是爲什麼你沒有看到它的變化。您需要調用節點的presentationNode來獲取節點在屏幕上的位置:

node.presentationNode.position