2012-01-24 44 views
5

Tôi đang gặp sự cố với phương pháp này. Tôi có hai hình chữ nhật rõ ràng là nằm trong nhau (Tôi thậm chí đã vẽ đồ thị tọa độ của họ theo cách thủ công để chắc chắn.) Khi tôi sử dụng CGRectContainsRect để so sánh hai hình chữ nhật này, nó trả về false. Đối với cuộc sống của tôi, tôi đã thử tất cả mọi thứ, quét lưới, và tôi không thể tìm thấy câu trả lời cho vấn đề này. Bất cứ ai có bất kỳ ý tưởng tại sao? Tôi đã bao gồm các giá trị cho CGRects khi tôi gỡ lỗi để cho thấy rằng chúng chắc chắn nằm trong nhau.CGRectContainsRect Not Working

-(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 gốc x = 141 y = 76, height = 25, width = 25

rect2 gốc x = 127 y = 91, height = 25, width = 25

Trả lời

24

CGRectContainsRect() kiểm tra nếu một hình chữ nhật hoàn toàn bao gồm một hình chữ nhật khác, không chỉ khi chúng giao nhau. Từ tọa độ của bạn, các hình chữ nhật không chứa nhau, nhưng chỉ giao nhau. Bạn đang tìm kiếm CGRectIntersectsRect().

+0

Cảm ơn bạn. Điều đó đã làm điều đó. Tôi đã thử điều đó trong quá khứ, nhưng nó không hoạt động sau đó. Sau đó, một lần nữa, tôi đã sửa chữa một số lỗi logic kể từ đó. – drucifer

+0

@itia Ferber cảm ơn vì đã chỉnh sửa câu trả lời của tôi .. Tôi đã ở trên điện thoại của mình đó là lý do tại sao rất nhiều lỗi – Shubhank

+0

@Shubhank Đừng lo lắng. Vui vẻ giúp đỡ. –

0

rect1 không chứa rect2 trong ví dụ của bạn.

Rect 1 x tọa độ khoảng từ 141 đến 166. Rect 2 x tọa độ khoảng từ 127 đến 152.

Chính vì vậy, rect2 không chứa trong rect1 (vì rect2 tồn tại trong vòng x tọa độ 127-140, và rect1 không tồn tại trong các tọa độ đó).

+0

kiểm tra lại toán học của bạn. rect1 là 141-166 và rect2 là 127-152 – drucifer

+0

đúng, tôi đã điều chỉnh phản hồi của tôi, nhưng lý do vẫn như cũ. thực tế một mình rằng rect2 tồn tại ở 127 và rect1 không có nghĩa là rect2 không thể ở bên trong rect1. –