2012-10-04 18 views
5

कोकोस 2 डी में, समन्वय प्रणाली बहुत सीधी है .. नीचे बाएं (0,0) है। जब भी मैं कुछ भी स्थिति निर्धारित करता हूं तो यह ठीक है।कोकोस 2 डी समन्वय प्रणाली

कहता है कि एक परत TouchEnabled है।

जब im मेरी स्प्राइट की स्थिति की स्थापना, यह ठीक है ..

[crab setPosition:ccp(20, 50)]; 

लेकिन अगर मैं एक्स मिल और y एक स्पर्श के समन्वय (और मान मैं स्प्राइट पर क्लिक किया ..):

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"Touches began!"); 
    NSArray *touchArray = [touches allObjects]; 
    UITouch *one = [touchArray objectAtIndex:0]; 
    pointOne = [one locationInView:[one view]]; 
    CCLOG(@"points are: %f and %f", pointOne.x, pointOne.y); 
} 

y समन्वय विपरीत है जो कोकोस 2 डी की समन्वय प्रणाली के विपरीत है जैसा कि वाई ऊपर से नीचे तक बढ़ता है!

तो मुझे लगता है कि दृश्य की समन्वय प्रणाली मैक के समन्वय प्रणाली से अलग है .. जो काफी काउंटर सहज है .. क्या यह सही है?

धन्यवाद!

उत्तर

4

ओपन एक (0, 0) नीचे के बाएँ जबकि iOS और इसलिए UIKit जो संभालती छूता शीर्ष के रूप में (0, 0 छोड़ दिया उपयोग का उपयोग करता है)। अपने बिंदु को परिवर्तित करना आसान है, आपको बस इसे याद रखना होगा।

कोकोस 2 डी 2 पर सही विधि।0

CGPoint uiKitPoint = [touch locationInView:touch.view]; 
CGPoint cocos2dPoint = [[CCDirector sharedDirector] convertToGL:uiKitPoint]; 
0

Cocos2D पहले से ही आप के लिए यह संभाल कर सकते हैं के बाएं कोने है। सीसीडी डायरेक्टर के पास इसके लिए कुछ तरीके हैं। कृपया, इस पुराने post पर एक नज़र डालें।

0

आमतौर पर, अधिकांश ग्राफिक्स से संबंधित अनुप्रयोगों के लिए, निचले बाएं (और मैक के साथ यह मामला है) पर स्थान (0, 0) रखने की प्रवृत्ति होती है - जहां आईओएस पर, यह शीर्ष- जैसा आपने देखा है छोड़ दिया।

जब आप कोकोस साथ इनपुट संभाल रहे हैं, आप जल्दी से इस पर convertTouchToNodeSpace विधि (कम से कम 1.x के साथ का उपयोग करके परिवर्तित कर सकते हैं - मैं 2.0 पर्याप्त साथ नहीं खेला गया है - लेकिन मेरा मानना ​​है कि यह convertToNodeSpace है एक त्वरित दस्तावेज जांच से वहाँ)। यह आपको सही समन्वय देने के लिए आवश्यक परिवर्तन करेगा।

(एनबी: मुझे अपने कुछ अन्य कोड को दोबारा जांचने के लिए खोदने की ज़रूरत है - लेकिन मुझे अपने सिर के शीर्ष को याद नहीं किया जा सकता है कि कैमरे के ऑफसेट्स की यह संख्या भी है - जब मैं प्राप्त कर सकता हूं तो मैं संपादित करूंगा मेरे डेमो कोड & की पुष्टि करें।)

0

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

[[CCDirector sharedDirector] convertToGL]; 

के लिए नहीं है UIKit -> Cocos2d

+0

convertToNodeSpace एक मुद्दा यह है कि वर्तमान नोड्स में नहीं है खुद को समन्वय प्रणाली परिवर्तित करता है। उदाहरण के लिए नोड्स समन्वय प्रणाली में एक विश्व समन्वय (लेकिन अभी भी ओपनजीएल प्रारूप में)। –

+0

कन्वर्टटॉग विधि – lukaswelte

+0

जोड़कर मेरे उत्तर को अपडेट करता है यह अभी भी गलत है। नोड स्पेस में कनवर्ट करें यूकिट पॉइंट्स –

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