objective-c - iOS中不规则形状的碰撞检测

标签 objective-c ios ipad

enter image description here

我正在为 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/

相关文章:

objective-c - RestKit:如何将 URL 参数映射到对象属性

objective-c - 有没有一种重复性较低的方法可以将 Action 消息转发给另一个对象?

ios - 如何使用 Spotify Web API 获取当前播放/最近播放的歌曲

iphone - 下载并保存可以为空白的图像

带有 sbjson 框架的 iphone 无法解析 json 数组

iphone - free() 调用在模拟器上有效,使 iPad 生气。 iPad粉碎

objective-c - 虚拟按键转到错误的应用程序

iphone - UIAlertView 在 iPhone 中被调用两次

iphone - iPad 上的 HTML5 视频播放器

javascript - 在 UIWebView 中打开的 HTML 页面中自动填充用户名和密码