Cocos2d - 旋转精灵的碰撞检测

时间:2012-07-19 05:40:14

标签: cocos2d-iphone

我尝试检测两个精灵之间的碰撞。

if(CGRectIntersectsRect([SpriteA BoundingBox], [SpriteB boundingBox]))

但是当我旋转任何精灵而不是碰撞检测并不完美时.. 我知道使用像素完美碰撞,但我不知道它。 请任何人帮我检查碰撞,如果有的话,给我任何代码块。

4 个答案:

答案 0 :(得分:1)

您可以使用box2d让它为您检测所有碰撞

答案 1 :(得分:1)

你可以用两种方式做。

  1. 使用box2D正文作为精灵。示例:CLICK HERE
  2. 使用CGMutablePathRef,并使用CGPathContainsPoint()而不是CGRectIntersectsRect。 示例:CLICK HERE

答案 2 :(得分:0)

你也可以引用Ray Wenderlich Tutorial来检测任何2个Box2D体之间的碰撞。

答案 3 :(得分:0)

这是可能的!试试CGPath。 我有同样的问题。我已经解决了这个教程:http://bobueland.com/cocos2d/2011/the-magic-of-cgpaths/

用于旋转路径尝试此方法,它将路径旋转到boudingBox的中心:

-(CGPathRef) rotateCGPath:(CGPathRef)path corner:(CGFloat)radians
{
    CGRect bounds = CGPathGetBoundingBox(path); 
    CGPoint center = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
    CGAffineTransform transf = CGAffineTransformIdentity;
    transf = CGAffineTransformTranslate(transf, center.x, center.y);
    transf = CGAffineTransformRotate(transf, -radians);
    transf = CGAffineTransformTranslate(transf, -center.x, -center.y);
    return CGPathCreateCopyByTransformingPath(path, &transf);
}

之后,您可以通过以下方式检测碰撞:

if (CGPathContainsPoint(Collisionpath, NULL, collisionPoint, NO))
{ //is inside the path }
祝你好运!