Cocos2D में, मैं एक मनमाने ढंग से उपयोगकर्ता द्वारा तैयार आकृति के खिलाफ टकराव की जाँच कैसे करूँ?


10

मैं एक स्प्राइट और किसी प्रकार के उपयोगकर्ता-जनित आकृति के बीच टकराव का पता लगाना चाहता हूं।

उदाहरण के लिए। स्क्रीन पर 3 ऑब्जेक्ट हैं। उपयोगकर्ता अपनी उंगली लेता है और 2 वस्तुओं के आसपास एक असामान्य आकार खींचता है। मुझे उन 2 वस्तुओं का पता लगाने की आवश्यकता है।

बैंगनी में उपयोगकर्ता का आकार, हरे और लाल रंग में गेम ऑब्जेक्ट

मैं इसे कुशलतापूर्वक Cocos2D का उपयोग कैसे करूं?

जवाबों:


10

उस विशेष उदाहरण के लिए एक बहुत आसान समाधान है।

मैं मान रहा हूं कि आपकी मनमानी आकृति सिर्फ अंकों की एक श्रृंखला है।

किसी भी दिशा में अपनी प्रत्येक वस्तु से एक किरण खींचें। यदि यह आपके आकार पर एक पंक्ति खंड को समाप्‍त करता है तो समयावधि (शून्य सहित), आप आकृति के बाहर हैं।

यदि आपके द्वारा प्रतिच्छेद की जाने वाली संख्या विषम है, तो आप ऑब्जेक्ट के अंदर हैं।

रे / लाइन खंड टकराव को खोजने / लागू करने के लिए एक बहुत ही आसान एल्गोरिदम है।


3

ज़रूर, मुझे अपने खेल स्टार कैच के लिए यह पता लगाना था। इसे करने के बेहतर तरीके हो सकते हैं लेकिन मैंने इसे कैसे किया। मुझे वास्तव में एल्गोरिथ्म ऑनलाइन मिला (माफ करना मैं स्रोत को याद नहीं कर सकता) मैंने एक बहुभुज के अंदर एक बिंदु का पता लगाने के लिए एक खोज की।

मैंने अपनी बात रखने के लिए एक NSMutableArray बनाया। मैं अपने टॉचेवैंट में अंक जोड़ता हूं।

- (BOOL) testNodeInLoop:(CCNode *)node {

    CGPoint prev;

    // This is more accurate point for the node
    CGPoint absPoint = [node convertToWorldSpace:CGPointZero];

    float x = absPoint.x;
    float y = absPoint.y;

    BOOL isIn = NO;

    CGPoint cp;

    for(int i = 0, j = [points count] - 1; i < [points count]; j = i++) {
        [[points objectAtIndex:i] getValue:&cp];
        [[points objectAtIndex:j] getValue:&prev];

        if( ((cp.y > y) != (prev.y > y)) && (x < (prev.x -cp.x) * (y - cp.y) / (prev.y - cp.y) + cp.x)) {
            isIn = !isIn;
        }
    }
    return isIn;
}

अगर यह मददगार है तो मुझे बताएं।


2

"रीयल टाइम टक्कर का पता लगाने" पुस्तक में लाइन / खंड टक्कर का पता लगाने के बारे में एक खंड है। Google पुस्तकें के माध्यम से उदाहरण: http://ow.ly/2gjQf


0

पिक्सेलवाइज़ टकराव की जाँच के लिए XNA डेवलपर साइट पर एक अच्छा ट्यूटोरियल श्रृंखला है।
http://creators.xna.com/en-US/tutorial/collision2dperpixeltransformed

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

जोड़ने के लिए संपादित: घटिया जवाब, सवाल गलत। यदि आप प्रति पिक्सेल कोल्ड पर पढ़ना चाहते हैं, तो ट्यूटोरियल अभी भी बहुत सभ्य हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.