CGRectContainsRect не работает

У меня проблемы с этим методом. У меня есть два прямоугольника, которые явно содержатся друг в друге (я даже нарисовал их координаты вручную, чтобы убедиться в этом). Когда я использую 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;
}

rect1 начало x = 141 y = 76, высота = 25, ширина = 25

начало координат rect2 x = 127 y = 91, высота = 25, ширина = 25


person drucifer    schedule 24.01.2012    source источник


Ответы (2)


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

person Shubhank    schedule 24.01.2012
comment
Спасибо. Это сделало это. Я пробовал это в прошлом, но тогда это не сработало. Опять же, с тех пор я исправил некоторые логические ошибки. - person drucifer; 24.01.2012
comment
@itia Ferber спасибо за редактирование моего ответа .. Я был на своем телефоне, поэтому много ошибок - person Shubhank; 24.01.2012
comment
@Shubhank Не беспокойтесь. Рад помочь. - person Itai Ferber; 24.01.2012

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

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

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

person Michael Frederick    schedule 24.01.2012
comment
перепроверь свою математику. rect1 — это 141–166, а rect2 — 127–152. - person drucifer; 24.01.2012
comment
правда, я поправил свой ответ, но рассуждения остались прежними. сам факт того, что rect2 существует по адресу 127, а rect1 не означает, что rect2 не может находиться внутри rect1. - person Michael Frederick; 24.01.2012