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中不均匀形状的碰撞检测的主要内容,如果未能解决你的问题,请参考以下文章

复杂形状的碰撞检测

复杂形状的碰撞检测

俄罗斯方块游戏开发系列教程4:形状碰撞检测(上)

PyQt5 像素级碰撞检测

碰撞检测有效但有小故障?

(译)LearnOpenGL实际案例Breakout:碰撞检测