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

Tec*_*Bee 5 objective-c ipad ios

在此输入图像描述

嗨,大家好,

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

if (CGRectIntersectsRect(obj1.frame, obj2.frame))
{
    NSLog(@" hit test done!! ");
}
Run Code Online (Sandbox Code Playgroud)

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

提前致谢.

此致,Ranjan

Rob*_*ier 2

对于像您的具体示例(三角形和圆形)这样简单的东西,David R\xc3\xb6nnqvist 提供的链接非常有用。您绝对应该查看它以查看一些可用的工具。但对于一般情况,最好的选择是剪切、绘图和搜索。

\n\n

有关一些背景信息,请参阅将 CGRRect 剪切到 CGPath

\n\n

首先,创建一个仅包含 alpha 的位图图像。上面的链接对此进行了解释。

\n\n

接下来,使用 . 将您的上下文剪辑到您的一张图像CGContextClipToMask()

\n\n

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

\n\n

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

\n\n

如果任何像素着色,则存在一些重叠。

\n\n
\n\n

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

\n