CGRect rect4 = CGRectMake(rock.position.x, rock.position.y, rock.size.width, rock.size.height);
CGRect bulletRect = CGRectMake(bullet.position.x, bullet.position.y, bullet.size.width, bullet.size.height);
if (CGRectIntersectsRect(bulletRect, rect4)) {
NSLog(@"hit Bullet");
//[bullet removeFromParent];
}
似乎“击中子弹”即使矩阵4不在子弹附近。 谢谢
答案 0 :(得分:0)
我不确切地知道你的形状是怎样的,但我的猜测是它们只是用矩形象征性的。
- 首先检查你的x和y摇滚和子弹位置是否真的是它们的左上角坐标,如果没有考虑你的边界矩形的平移。
- 要提高边界形状的精度,不要太复杂,可以使用位于对象矩形较小的边界上的点云。然后,您将使用CGRectContainsPoint
检查形状是否相交。您应该将您的点放在多边形边界的最突出部分。你可以将它们的坐标相对于rock.position.x和y坐标。
例如:你知道你的摇滚乐的x和y。您可以使用以下内容来定位一个点:p1 = x + dx,y + dy。
请注意,在没有交叉点的情况下,典型的边界框方法会将其视为交叉点。
所以,在代码中:
CGPoint p1 = CGPointMake(rock.position.x+dx, rock.position.y+dy);
CGRect bulletRect = CGRectMake(bullet.position.x, bullet.position.y, bullet.size.width, bullet.size.height);
if (CGRectContainsPoint(bulletRect, p1)) {
NSLog(@"hit Bullet");
}
当然,你拥有的点越多,它就越精确。如果你有一个真实的话,只需循环一个点数组和break
。
另一个更加复杂和准确的选择可能是图形引擎,例如Box2D
希望它有所帮助。
˚F
修改
Dx和Dy是您已知点(rock.position.x,rock.position.y)与测试点(此处为p1)之间的差异。