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

时间:2012-08-09 12:28:51

标签: objective-c ios ipad

enter image description here

嗨,大家好,

我正在为iPad进行拖放活动。我有一个矩形.png图像(参见名为obj2的图像)。当我将obj1仅拖动到矩形的黑色部分时,它应该做出反应。

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

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

提前致谢。

此致 兰詹

1 个答案:

答案 0 :(得分:2)

对于像您的具体示例(三角形和圆形)这样简单的内容,DavidRönnqvist提供的链接非常有用。你应该看看它看到一些可用的工具。但对于一般情况,最好的选择是剪裁,绘图和搜索。

有些背景,请参阅Clipping a CGRRect to a CGPath

首先,创建一个仅限alpha的位图图像。这在上面的链接中有解释。

接下来,使用CGContextClipToMask()将您的上下文剪辑到您的某个图片。

现在,将您的其他图像绘制到上下文中。

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

如果任何像素着色,则会有一些重叠。


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

相关问题