1

2 つのスプライト間の衝突を検出しようとしています。

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

しかし、衝突検出よりもスプライトを回転させると、完璧ではありません..ピクセルパーフェクトコリジョンを使用することは知っていますが、それについてはわかりません。衝突を検出する方法について誰か助けてください。もしあれば、コードのブロックを教えてください。

4

4 に答える 4

1

box2d を使用して、すべての衝突を検出させることができます

于 2012-07-19T05:52:02.213 に答える
1

2 つの方法で行うことができます。

  1. スプライトに box2D ボディを使用します。例:ここをクリック
  2. CGMutablePathRef を使用し、CGRectIntersectsRect の代わりに CGPathContainsPoint() を使用します。例:ここをクリック
于 2012-07-19T05:53:46.300 に答える
0

任意の 2 つの Box2D ボディ間の衝突の検出については、 Ray Wenderlich チュートリアルを参照することもできます。

于 2012-07-19T07:09:02.633 に答える
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 }

幸運を!

于 2013-06-26T11:27:05.337 に答える