0

我正在创建一个益智游戏,你必须在障碍物周围移动一个物体才能到达你的目标。但是,由于某种原因,当我使用 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;
        }
    }

这会导致物体在撞击时重叠,从而在尝试将物体朝不同方向移动时会出现问题。经过多次不同的尝试,对于我的生活,当它接触到有障碍物的边缘时,我无法让物体停下来。我怎样才能做到这一点?

4

1 回答 1

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.");
}

将输出“矩形不相交”。

没有内置CGRect函数来确定两个矩形是否接触,但您可以编写一个遍历 4 种可能性的函数。

于 2014-08-19T00:09:10.433 回答