为什么对象与CGRectIntersectsRect重叠?

时间:2014-08-18 23:53:07

标签: ios objective-c cgrect cgrectintersectsrect

我正在创建一个益智游戏,您必须在障碍物周围移动物体以达到目标。但是,由于某些原因,当我使用CGRectIntersectsRect时,对象会重叠。我希望物体在彼此接触边缘时停止,而不是在它们彼此重叠时。目前的代码如下:

-(void)objectObstacleCollision {

if (CGRectIntersectsRect(object.frame, obstacle1.frame)) {
    xMotion = 0;
    yMotion = 0;

    if (objectMovingUp == YES) {
        objectCrashedUp = YES;
        objectMovingUp = NO;

        if (objectCrashedUp == YES && objectMovingUp == NO) {

            up.hidden = YES;
            down.hidden = NO;
            right.hidden = NO;
            left.hidden = NO;
        }
    }

这会导致物体在撞击时重叠,这会在尝试向不同方向移动物体时导致问题。在经历了许多不同的尝试后,对于我的生活,当它碰到有障碍物的边缘时,我无法让物体停止。我怎样才能实现这一目标?

1 个答案:

答案 0 :(得分:2)

如果两个角落共享边缘,它们不相交,它们会触碰。例如,此代码:

CGRect rect1 = CGRectMake(0, 0, 100, 100);
CGRect rect2 = CGRectMake(0, 100, 100, 100);

if (CGRectIntersectsRect(rect1, rect2)) {
    NSLog(@"The intersection rect is %@", NSStringFromCGRect(CGRectIntersection(rect1, rect2)));
} else {
    NSLog(@"The rects don't intersect.");
}

将输出" rect不相交。"

没有内置的CGRect函数来确定两个rects是否正在触摸,但你可以编写一个迭代4种可能性的函数。