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

问题描述 投票:5回答:1

enter image description here

我正在开发iPad的拖放活动。我有一个长方形的PNG图像(见名为obj2的图像)。当我只在矩形的黑色部分拖动obj1时,它应该有反应。

if (CGRectIntersectsRect(obj1.frame, obj2.frame))
{
    NSLog(@" hit test done!! ");
}

现在,这段代码即使在透明的区域上也会进行点击测试。如何防止这种情况发生?

objective-c ios ipad
1个回答
2
投票

对于像您的具体例子(三角形和圆形)这样简单的东西,David Rönnqvist给出的链接非常有用。你一定要看看它,看看一些可用的工具。但对于一般的情况,最好的办法是剪裁、绘制和搜索。

关于一些背景知识,请看 将一个CGRRect夹到一个CGPath上。.

首先,创建一个只有alpha的位图图像。这在上面的链接中解释。

接下来,使用以下方法将你的上下文剪辑到你的一张图片上。CGContextClipToMask().

现在,将你的另一张图片画到上下文上。

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

如果任何一个像素着色,那么就会有一些重叠。


另一种类似的方法(实际上可能更快),是将每个图像绘制到它自己的只有alpha的CGBitmapContext中。然后在每个上下文中走动像素,看看它们是否曾经同时是>128。

© www.soinside.com 2019 - 2024. All rights reserved.