iOS中不均匀形状的碰撞检测
Posted
技术标签:
【中文标题】iOS中不均匀形状的碰撞检测【英文标题】:Collision detection of uneven shapes in iOS 【发布时间】:2012-08-09 12:28:50 【问题描述】:我正在研究 iPad 的拖放活动。我有一个矩形 PNG 图像(参见名为 obj2 的图像)。当我只在矩形的黑色部分拖动 obj1 时,它应该会做出反应。
if (CGRectIntersectsRect(obj1.frame, obj2.frame))
NSLog(@" hit test done!! ");
现在,这段代码甚至在透明区域也进行了命中测试。如何防止这种情况发生?
【问题讨论】:
oleb.net/blog/2012/02/cgpath-hit-testing 当您同时使用CGRect
时,它们都将是矩形。您需要使用不同的方法。
【参考方案1】:
对于像您的具体示例(三角形和圆形)这样简单的东西,David Rönnqvist 提供的链接非常有用。您绝对应该查看它以查看一些可用的工具。但对于一般情况,最好的选择是剪辑、绘图和搜索。
有关一些背景信息,请参阅Clipping a CGRRect to a CGPath。
首先,创建一个只有 alpha 的位图图像。这在上面的链接中进行了解释。
接下来,使用CGContextClipToMask()
将您的上下文剪辑到您的一张图像中。
现在,将您的其他图像绘制到上下文中。
最后,在位图数据中搜索任何彩色像素(示例代码请参见上面的链接)。
如果任何像素着色,则存在一些重叠。
另一种类似的方法(实际上可能更快)是将每个图像绘制到它自己的 alpha-only CGBitmapContext 中。然后遍历每个上下文中的像素,看看它们是否同时都>128。
【讨论】:
以上是关于iOS中不均匀形状的碰撞检测的主要内容,如果未能解决你的问题,请参考以下文章