我正在创建一个益智游戏,您必须在障碍物周围移动物体以达到目标。但是,由于某些原因,当我使用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;
}
}
这会导致物体在撞击时重叠,这会在尝试向不同方向移动物体时导致问题。在经历了许多不同的尝试后,对于我的生活,当它碰到有障碍物的边缘时,我无法让物体停止。我怎样才能实现这一目标?
答案 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种可能性的函数。