2011-04-23 16 views
6

मैं थोड़ी देर के लिए देख रहा हूं, और मुझे किसी कारण से इसका उत्तर नहीं मिला है। यह काफी आसान लगता है, लेकिन शायद मुझे पुस्तकालय में सही कार्य नहीं मिल रहा है।पूर्ण स्क्रीन निर्देशांक में कोकोस 2 डी सीसीएनओड स्थिति

मेरे पास एक परत वाला एक दृश्य है जिसमें सीसीएसप्रेट का एक गुच्छा है जिसमें प्रत्येक सीसीएसप्रिट उनके साथ है।

आवेदन के दौरान, मैं मुख्य परत की स्थिति के चारों ओर स्थानांतरित करता हूं, ताकि मैं एक कैमरे के चारों ओर एक "पैन" कर सकूं। (यानी मैं पूरी परत का अनुवाद करता हूं ताकि व्यूपोर्ट बदल जाए)।

अब मैं स्क्रीन निर्देशांक में एक सीसीएनोड की पूर्ण स्थिति निर्धारित करना चाहता हूं। स्थिति संपत्ति माता-पिता नोड से संबंधित स्थिति को वापस कर देती है, लेकिन मैं वास्तव में यह स्क्रीन पर अपनी वास्तविक स्थिति में बदलना चाहता हूं।

इसके अलावा, एक अतिरिक्त बोनस के रूप में, यह शानदार होगा अगर मैं इस स्थिति को समन्वय प्रणाली के रूप में व्यक्त कर सकता हूं जहां स्क्रीन के ऊपरी बाईं ओर 0,0 नक्शे और स्क्रीन के निचले दाएं भाग में 1,1 मानचित्र हैं। (इसलिए मैं सभी उपकरणों के साथ संगत रहता हूं)

संपादित करें: ध्यान दें कि समाधान को सीसीएनओड्स के किसी भी पदानुक्रम के लिए अधिमानतः काम करना चाहिए। (CGPoint) पी

यह निर्देशांक अपने दृश्य के सापेक्ष रिटर्न:

उत्तर

18

हर CCNode और उसके सन्तान, एक विधि नामित convertToWorldSpace है।

जब आपके पास यह समन्वय होता है, तो अपने वाई-अक्ष को फ़्लिप करें, क्योंकि आप ऊपर बाईं ओर 0,0 होना चाहते हैं।

CCNode * myNode = [[CCNode alloc] init]; 
myNode.position = CGPointMake(150.0f, 100.0f); 

CCSprite * mySprite = [[CCSprite alloc] init]; // CCSprite is a descendant of CCNode 
[myNode addChild: mySprite]; 
mySprite.position = CGPointMake(-50.0f, 50.0f); 

// we now have a node with a sprite in in. On this sprite (well, maybe 
// it you should attack the node to a scene) you can call convertToWorldSpace: 
CGPoint worldCoord = [mySprite convertToWorldSpace: mySprite.position]; 

// to convert it to Y0 = top we should take the Y of the screen, and subtract the worldCoord Y 
worldCoord = CGPointMake(worldCoord.x, ((CGSize)[[CCDirector sharedDirector] displaySizeInPixels]).height - worldCoord.y); 

// This is dry coded so may contain an error here or there. 
// Let me know if this doesn't work. 

[mySprite release]; 
[myNode release]; 

+0

आह शानदार। लगभग अपनी खुद की, बेवकूफ गलती पर यद्यपि: स्प्राइट की स्थिति नहीं ले ली, बल्कि नोड के बजाय, जो काम नहीं करता है। जाहिरा तौर पर। लेकिन यह शानदार है, क्योंकि यह खाता स्केलिंग और इस तरह भी लेता है। महान। आपके लिए पांच सितारे – Tovi7

+0

सीसीडीएंडर के पास cocos2d के हाल के संस्करणों में displaySizeInPixels नहीं है। इसके लिए कोई फिक्स? (मिला 'winSizeInPixels', हो सकता है।) – Jonny

+1

मुझे पता है कि यह पुराना है, लेकिन क्या यह सही है कि मुझे एक विश्वकॉर्ड = (50, 200) (रेखा 6) मिलती है? मैं विश्वकॉर्ड = (100, 150) की उम्मीद करूंगा। जब मैं आगे बढ़ता हूं, तो मैं टीएक्स = 100 देख रहा हूं, और ty = 150 ट्रांसफॉर्म के रूप में ... अक्ष को स्विच किया जाता है? क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है? – gdbj

संबंधित मुद्दे