2 つのスプライト間の衝突を検出しようとしています。
if(CGRectIntersectsRect([SpriteA BoundingBox], [SpriteB boundingBox]))
しかし、衝突検出よりもスプライトを回転させると、完璧ではありません..ピクセルパーフェクトコリジョンを使用することは知っていますが、それについてはわかりません。衝突を検出する方法について誰か助けてください。もしあれば、コードのブロックを教えてください。
2 つのスプライト間の衝突を検出しようとしています。
if(CGRectIntersectsRect([SpriteA BoundingBox], [SpriteB boundingBox]))
しかし、衝突検出よりもスプライトを回転させると、完璧ではありません..ピクセルパーフェクトコリジョンを使用することは知っていますが、それについてはわかりません。衝突を検出する方法について誰か助けてください。もしあれば、コードのブロックを教えてください。
box2d を使用して、すべての衝突を検出させることができます
任意の 2 つの Box2D ボディ間の衝突の検出については、 Ray Wenderlich チュートリアルを参照することもできます。
それが可能だ!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 }
幸運を!