我正在为 iPad 开发拖放事件。我有一个矩形 PNG 图像(请参阅名为 obj2 的图像)。当我仅将 obj1 拖动到矩形的黑色部分时,它应该会使用react。
if (CGRectIntersectsRect(obj1.frame, obj2.frame))
{
NSLog(@" hit test done!! ");
}
此时,这段代码甚至在透明区域上也进行了 HitTest 。如何防止这种情况发生?
最佳答案
对于像您的具体示例(三角形和圆形)这样简单的东西,David Rönnqvist 提供的链接非常有用。您绝对应该查看它以了解一些可用的工具。但对于一般情况,最好的选择是裁剪、绘图和搜索。
有关一些背景,请参阅 Clipping a CGRRect to a CGPath .
首先,创建一个只有 alpha 的位图图像。这在上面的链接中有解释。
接下来,使用 CGContextClipToMask()
将上下文剪辑到其中一张图像。
现在,将您的其他图像绘制到上下文中。
最后,在位图数据中搜索任何彩色像素(示例代码请参见上面的链接)。
如果有任何像素着色,则存在一些重叠。
另一种类似的方法(实际上可能更快)是将每个图像绘制到其自己的仅 alpha CGBitmapContext 中。然后在每个上下文中遍历像素,看看它们是否同时大于 128。
关于objective-c - iOS中不规则形状的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11883476/