没有CGRectIntersectsRect的碰撞

时间:2014-03-12 19:25:27

标签: ios objective-c collision-detection cgrect

我目前正在使用xcode进行游戏。我唯一的问题是我有复杂的图像,我只希望在图像相互接触而不是实际的边界框时检测到碰撞。有没有什么方法可以找到一种方法在没有CGRectIntersectsRect的非矩形,复杂图像之间进行碰撞检测。

如果有人能提供帮助,我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

我建议使用较小的CGRect,从左/右和上/下边缘减去一些偏移量并使用CGRectIntersectRect。 您还可以检查与rect的点交互:

UIImageView *sprite = //Your sprite;
CGPoint point = CGPointMake(5,5);
BOOL isPointInsideSprite = [sprite pointInside:point withEvent:nil];

第二种解决方案更昂贵但更精确。

答案 1 :(得分:0)

呃......好吧,你要求的东西很难。

要检查两个图像是否发生碰撞,你可以使用另一个图像的alpha遮罩渲染一个图像,然后检查图像是否完全透明......但是 >慢,碰撞检测需要

碰撞检测(模型级别的东西)依赖于你正在使用的精灵(视图级别的东西)也有点奇怪。你更新艺术风格,突然间游戏变得更难了!

出于这个原因,大多数游戏,甚至3D游戏,使用更简单的形状来执行命中检测。圆形和矩形碰撞可以比任意位图更有效地计算,因此如果您定义一个好的边界框(可以是矩形或圆形或其他),您可以获得更好的性能。

现在......如果你真的需要一个怪异的形状,圆圈和矩形不是很好的近似值?那么,你可以定义任意多边形交集算法......如果这真的是你需要进行命中检测的方式。但是你仍然希望用抽象的形状而不是图像来表示命中检测区域。如果这是您需要的方式,请研究多边形交叉算法。