2014-11-06 3 views
5

मैं सीनकेट के साथ एक दृश्य विकसित कर रहा हूं।घूर्णन के बाद सीनकेट में एक उप नोड की असली स्थिति कैसे प्राप्त करें?

// 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 कुछ कार्यों और कुछ एनिमेशन बनाने के लिए उपयोग: मैं एक उपनोड के साथ एक मुख्य नोड है। टाइमर इवेंट में मैं ऐसा करता हूं:

ग्रह रोटेशन + = 0.1; planet.rotation = SCNVector4Make (0,1,0, planetRotation);

लेकिन अगर मैं उपग्रह नोड की स्थिति प्राप्त करने का प्रयास करता हूं तो मुझे हमेशा वही मान मिलता है। मैंने स्थिति नोड की वास्तविक स्थिति जानने के लिए स्थिति नोड प्राप्त करने का प्रयास किया लेकिन कुछ भी नहीं बदला।

जब मैं पैरेंट नोड के घूर्णन को बदलता हूं तो मैं उप-नोड की असली स्थिति कैसे प्राप्त कर सकता हूं?

अग्रिम

उत्तर

6

एक नोड की स्थिति में धन्यवाद अपनी मूल समन्वय प्रणाली में व्यक्त किया है। UIKIt/AppKit में विचारों की तरह ही। यदि आप दृश्य के फ्रेम को बदलते हैं, तो इसके सबव्यूज़ का फ्रेम बदल नहीं जाता है।

आप जो चाहते हैं वह सब है जो हम सबनोड के विश्व परिवर्तन को बदलते हैं (यानी इसका परिवर्तन दृश्य के रूट नोड की समन्वय प्रणाली में व्यक्त किया जाता है)।

आप worldTransform और -convertPosition:toNode: पर एक नज़र डाल सकते हैं।

3

भौतिकी के कारण नोड की स्थिति नहीं बदलेगी, यही कारण है कि आप इसे बदल नहीं रहे हैं। आपको नोड की स्थिति प्राप्त करने के लिए नोड की प्रस्तुति नोड को कॉल करने की आवश्यकता है क्योंकि इसे ऑनस्क्रीन प्रस्तुत किया गया है:

node.presentationNode.position 
संबंधित मुद्दे