CGRectContainsRect не работает - PullRequest
       4

CGRectContainsRect не работает

5 голосов
/ 24 января 2012

У меня проблемы с этим методом.У меня есть два прямоугольника, которые, очевидно, содержатся внутри друг друга (я даже вручную изобразил их координаты). Когда я использую CGRectContainsRect для сравнения этих двух прямоугольников, он возвращает false.За всю жизнь я перепробовал все, почесал сеть, и не могу найти ответ на эту проблему.У кого-нибудь есть идеи, почему?Я включил значения для CGRects, когда я отлаживаю, чтобы показать, что они определенно находятся внутри друг друга.

-(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;
}

прямое начало 1 x = 141 y = 76, высота = 25, ширина = 25

прямоугольник2 происхождение x = 127 y = 91, высота = 25, ширина = 25

Ответы [ 2 ]

24 голосов
/ 24 января 2012

CGRectContainsRect() проверяет, полностью ли один прямоугольник охватывает другой, а не только если они пересекаются. Исходя из ваших координат, прямоугольники не содержат друг друга, а просто пересекаются. Вы ищете CGRectIntersectsRect().

0 голосов
/ 24 января 2012

rect1 не содержит rect2 в вашем примере.

Rect 1 x координаты от 141 до 166. Rect 2 x координаты охватывают от 127 до 152.

Таким образом, rect2 не содержится в rect1 (поскольку rect2 существует в координатах x 127-140, а rect1 не существует в этих координатах).

...