2012-01-24 8 views
5

Mam problemy z tą metodą. Mam dwa prostokąty, które są oczywiście zawarte w sobie nawzajem. (Nawet ręcznie wykreślałem ich współrzędne, aby się upewnić.) Kiedy używam CGRectContainsRect do porównania tych dwóch prostokątów, zwracana jest wartość false. Dla mojego życia próbowałem wszystkiego, przeszukiwałem sieć i nie mogę znaleźć odpowiedzi na ten problem. Ktoś ma jakiś pomysł, dlaczego? Dołączyłem wartości CGRects podczas debugowania, aby pokazać, że są one zdecydowanie w sobie.CGRectContainsRect Nie działa

-(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 pochodzenia X = 141 Y = 76, wysokość = 25, szerokość = 25

rect2 pochodzenia X = 127 Y = 91, wysokość = 25, szerokość = 25

Odpowiedz

24

CGRectContainsRect() sprawdza, czy jeden prostokąt całkowicie obejmuje inny, a nie tylko, czy się przecinają. Ze swoich współrzędnych prostokąty nie zawierają się nawzajem, tylko przecinają się. Szukasz CGRectIntersectsRect().

+0

Dziękuję. Tak było. Próbowałem tego w przeszłości, ale wtedy nie działało. Z drugiej strony poprawiłem kilka błędów logicznych od tego czasu. – drucifer

+0

@itia Ferber dzięki za zredagowanie mojej odpowiedzi .. Byłem na telefonie, dlatego wiele błędów – Shubhank

+0

@Shubhank Bez obaw. Chętnie pomoże. –

0

rect1 nie zawiera rect2 w twoim przykładzie.

Rect 1 współrzędnej zakres od 141 do 166. Rect 2 współrzędnej zakres od 127 do 152.

nich, rect2 nie jest zawarty w rect1 (ponieważ rect2 istniejącego we współrzędnej 127-140 i rect1 nie istnieje w tych współrzędnych).

+0

ponownie sprawdź swoją matematykę. rect1 to 141-166, a rect2 127-152 – drucifer

+0

prawda, dostosowałem swoją odpowiedź, ale rozumowanie jest wciąż takie samo. Sam fakt, że rect2 istnieje w 127 i rect1, nie oznacza, że ​​rect2 nie może znajdować się wewnątrz rect1. –