1

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

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

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

4

4 回答 4

1

您可以通过两种方式进行操作。

  1. 为您的精灵使用 box2D 身体。示例:点击这里
  2. 使用 CGMutablePathRef,并使用 CGPathContainsPoint() 代替 CGRectIntersectsRect。示例:点击这里
于 2012-07-19T05:53:46.300 回答
1

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

于 2012-07-19T05:52:02.213 回答
0

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

旋转路径试试这个方法,它围绕边界框的中心旋转路径:

-(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 }

祝你好运!

于 2013-06-26T11:27:05.337 回答
0

您还可以参考Ray Wenderlich 教程来检测任意 2 个 Box2D 物体之间的碰撞。

于 2012-07-19T07:09:02.633 回答