检查触摸区域而不仅仅是矩形的更好方法

时间:2009-09-17 15:19:42

标签: iphone objective-c cocos2d-iphone

只是想知道是否有其他方法可以使用特定形状的多边形来检查触摸区域,而不仅仅是使用CGRectMake。

以下是此示例的相同代码:

CGPoint location = [[Director sharedDirector] convertCoordinate: [touch locationInView: [touch view]]];
CGRect mySurface = CGRectMake(x, y, temp.contentSize.width, temp.contentSize.height);

if(CGRectContainsPoint(mySurface, location)) {
    // do something
    return kEventHandled;
}

考虑在if语句中有几个CGRect对象,但是想知道是否有更好的方法来执行此操作,例如html中的图像映射用于锚点。

2 个答案:

答案 0 :(得分:3)

考虑CGPath:

创建路径,有许多可用的GPath功能。然后使用:

检查点是否包含在图形路径中。

bool CGPathContainsPoint (
   CGPathRef path,
   const CGAffineTransform *m,
   CGPoint point,
   bool eoFill
);

答案 1 :(得分:0)

或者你可以使用像Box2D或Chipmunk这样的物理引擎来处理碰撞。 两个引擎都集成在cocos2D中。 这样您就可以定义圆形,正方形,多边形......并为您处理碰撞。虽然我没有测量过,但它很精确,也可能非常快。 在缺点方面,你必须让这个物理世界与你的对象保持同步,你必须设置一些需要花费一些时间的东西。

所以问题始终是:我是否需要它是那么精确还是简单的边界框足够好?!