简单的2D“碰撞检测”iOS

时间:2012-01-28 23:44:07

标签: ios xcode drawing coordinates diagram

我正在编写一个计算CGPoint并在信封中显示标记的应用程序(如果您愿意,可以使用图表)。我的信封只是UIImageView中背景图像的一部分。我想要做的是构造一种“线”,对应于包络限制(它们不是直线,而是曲线),这样如果计算出的CGPoint位于该线的左侧,或者右侧,另一条线,然后计算点不被批准。如果它在这两个中间,它就被批准了。

我首先考虑使用CoreGraphics绘制线条,但我不确定是否可以检查计算出的CGPoint是否位于这些线的右侧或左侧。

信封只有149px高,所以我也在考虑将词典放在一起,其中y位置的键和表示定义边界线的像素的x位置的值。

应用程序非常简单,并没有动画任何东西。有没有人知道如何最好地为这种行为提出解决方案?

1 个答案:

答案 0 :(得分:1)

您可以通过创建一个代表您的边界线(信封的轮廓)的CGPath并使用CGPathContainsPoint测试其中包含一个点来完成此操作。

你需要做一些试验和错误来构建一个与你的信封形状相匹配的CGPath,试着在drawRect方法中填写它以查看你的路径实际是什么。

以下是圆圈路径的示例:

CGPoint viewCenter = CGPointMake(100,100);
CGPoint checkPoint = CGPointMake(110,110);
UIBezierPath *bpath = [UIBezierPath bezierPathWithArcCenter:viewCenter radius:50 startAngle:0 endAngle:DEGREES_TO_RADIANS(360) clockwise:YES];
CGPathRef path = [bpath CGPath];
BOOL inPath = CGPathContainsPoint(path, NULL, checkPoint, NO);

这里我的DEGREES_TO_RADIANS定义如下:

#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)