2012-01-24 26 views
5

मुझे इस विधि में समस्याएं आ रही हैं। मेरे पास दो आयताकार हैं जो स्पष्ट रूप से एक दूसरे के भीतर निहित हैं। (मैंने यह सुनिश्चित करने के लिए मैन्युअल रूप से अपने निर्देशांक को भी लपेट लिया है।) जब मैं इन दो आयतों की तुलना करने के लिए CGRectContainsRect का उपयोग करता हूं, तो यह झूठा होता है। मेरे जीवन के लिए, मैंने सब कुछ करने की कोशिश की है, नेट को खराब कर दिया है, और मुझे इस समस्या का जवाब नहीं मिल रहा है। किसी को भी कोई विचार है क्यों? मैंने CGRects के मानों को शामिल किया है जब मैं यह दिखाने के लिए डीबग करता हूं कि वे निश्चित रूप से एक-दूसरे के भीतर हैं।CGRectContainsRect काम नहीं कर रहा

-(bool)checkBoundingBox { 
    bool returnItem = YES; 

    //Checks for sprite interaction 
    for (int i = 0; i < [arrGameItems count]; i++) { 
     CGRect rect2 = [[self getChildByTag:1] boundingBox]; 
     CGRect rect1 = [[self getChildByTag:3] boundingBox]; 

     //  rect1 = CGRectStandardize(rect1); 
     //  rect2 = CGRectStandardize(rect2); 

     if (CGRectContainsRect(rect2, rect1)) { 
      CCLOG(@"removed child b*&ch"); 
      [self removeChildByTag:[arrGameItems count] cleanup:YES]; 
      returnItem = NO; 
     } 
    } 

    CCLOG(@"g-dammit");  
    return returnItem; 
} 

rect1 मूल एक्स = 141 y = 76, ऊंचाई = 25, चौड़ाई = 25

rect2 मूल एक्स = 127 y = 91, ऊंचाई = 25, चौड़ाई = 25

उत्तर

24

CGRectContainsRect() जांचता है कि क्या एक आयताकार पूरी तरह से दूसरे को शामिल करता है, न कि अगर वे छेड़छाड़ करते हैं। आपके निर्देशांक से, आयतों में एक-दूसरे को शामिल नहीं किया जाता है, लेकिन केवल अंतरण होता है। आप CGRectIntersectsRect() खोज रहे हैं।

+0

धन्यवाद। उसने ऐसा किया मैंने अतीत में कोशिश की थी, लेकिन यह तब काम नहीं किया। फिर फिर से, मैंने तब से कुछ तर्क गलतियों को सही किया है। – drucifer

+0

@itia Ferber मेरे उत्तर को संपादित करने के लिए धन्यवाद .. मैं अपने फोन पर था इसलिए बहुत सारी गलतियों – Shubhank

+0

@ शुभेंक कोई चिंता नहीं। मदद करने के लिए खुश। –

0

rect1 में आपके उदाहरण में rect2 नहीं है।

रेक्ट 1 x 141 से 166 को काल का समन्वय करता रेक्ट 2 एक्स निर्देशांक 127 से 152.

वजह करने के लिए अवधि, rect2 rect1 के भीतर निहित नहीं है (क्योंकि rect2 मौजूद भीतर एक्स निर्देशांक 127-140, और rect1 उन निर्देशांक में मौजूद नहीं है)।

+0

अपने गणित को दोबारा जांचें। rect1 141-166 है और rect2 127-152 – drucifer

+0

सत्य है, मैंने अपनी प्रतिक्रिया समायोजित की है, लेकिन तर्क अभी भी वही है। अकेले तथ्य यह है कि rect2 127 और rect1 पर मौजूद है इसका मतलब यह नहीं है कि rect2 rect1 के अंदर नहीं हो सकता है। –

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