我遇到了这种方法的问题。我有两个明显相互包含的矩形。(我甚至手动绘制了它们的坐标以确保。)当我使用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
答案 0 :(得分:24)
CGRectContainsRect()
检查一个矩形是否完全包含另一个矩形,而不仅仅是它们是否相交。从您的坐标,矩形不包含彼此,但只是相交。您正在寻找CGRectIntersectsRect()
。
答案 1 :(得分:0)
rect1在您的示例中不包含rect2。
Rect 1 x坐标范围从141到166。 Rect 2 x坐标范围从127到152。
因此,rect2不包含在rect1中(因为rect2存在于x坐标127-140中,而rect1在这些坐标中不存在。)