Objective c iOS中不均匀形状的碰撞检测

Objective c iOS中不均匀形状的碰撞检测,objective-c,ios,ipad,Objective C,Ios,Ipad,我正在为iPad进行拖放操作。我有一个矩形PNG图像(参见名为obj2的图像)。当我只在矩形的黑色部分拖动obj1时,它应该会做出反应 if (CGRectIntersectsRect(obj1.frame, obj2.frame)) { NSLog(@" hit test done!! "); } 现在,这段代码即使在透明区域也要进行命中测试。如何防止这种情况发生?对于像您的具体示例(三角形和圆形)这样简单的事情,David Rönnqvist给出的链接非常有用。你肯定应该看看它,看

我正在为iPad进行拖放操作。我有一个矩形PNG图像(参见名为obj2的图像)。当我只在矩形的黑色部分拖动obj1时,它应该会做出反应

if (CGRectIntersectsRect(obj1.frame, obj2.frame))
{
    NSLog(@" hit test done!! ");
}

现在,这段代码即使在透明区域也要进行命中测试。如何防止这种情况发生?

对于像您的具体示例(三角形和圆形)这样简单的事情,David Rönnqvist给出的链接非常有用。你肯定应该看看它,看看一些可用的工具。但对于一般情况,最好的选择是剪辑、绘制和搜索

有关背景信息,请参见

首先,创建一个纯alpha位图图像。以上链接对此进行了解释

接下来,使用
CGContextClipToMask()
将上下文剪辑到一个图像中

现在,在上下文中绘制另一个图像

最后,在位图数据中搜索任何彩色像素(请参见上面的链接以获取示例代码)

如果任何一个像素是彩色的,那么就有一些重叠



另一种类似的方法(实际上可能更快)是将每个图像绘制到其自身的纯alpha CGBitmapContext中。然后在每个上下文中遍历像素,看看它们是否同时都大于128。

当您对它们使用
CGRect
时,它们都将是矩形。您需要使用不同的方法。