2012-08-09 13 views
5

enter image description here衝突検出のiOS

こんにちはみんな、

をして、私はドラッグに取り組んでいますとiPadのための活動をドロップします。私は長方形の.png画像を持っています(画像はobj2という名前です)。 obj1を四角形の黒い部分だけにドラッグすると、反応するはずです。

if (CGRectIntersectsRect(obj1.frame, obj2.frame)) 
{ 
    NSLog(@" hit test done!! "); 
} 

現在、このコードは透明領域でもヒットテストを受けます。それが起こらないようにするには?

ありがとうございます。あなたの具体的な例(三角形や円)のような単純なものについては

よろしく、 ランジャン

+0

http://oleb.net/blog/2012/02/cgpath-hit-testing/ –

+0

両方に 'CGRect'を使用している場合、両方とも長方形になります。別の方法を使用する必要があります。 – Dustin

答えて

2

、デビッドRönnqvistが与えるリンクは非常に便利です。利用可能なツールを見るには、間違いなくそれを見てください。しかし、一般的なケースでは、クリッピング、描画、検索が最善の策です。

背景については、Clipping a CGRRect to a CGPathを参照してください。

まず、アルファ専用のビットマップイメージを作成します。これは上のリンクで説明されています。

次に、CGContextClipToMask()を使用して画像のいずれかにコンテキストをクリップします。

もう一方のイメージをコンテキストに描画します。

最後に、色付きピクセルのビットマップデータを検索します(上記のコード例を参照)。

ピクセルのいずれかに色が付いている場合は、重なりがあります。


他、(実際に速いかもしれない)同様のアプローチは、それ自身のアルファのみCGBitmapContextに各画像を描画することです。次に、各コンテキストのピクセルを歩き、同時に両方が> 128であるかどうかを確認します。