2012-08-09 8 views
5

enter image description hereCollision detekcja nierównych kształtach w iOS

Hi guys,

Pracuję na przeciągnij i upuść działalności dla iPada. Mam prostokąt .png obrazu (patrz obrazek o nazwie obj2). Kiedy przeciągam obiekt obj1 tylko na czarną część prostokąta, powinien on reagować.

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

Teraz ten fragment kodu przechodzi test nawet na przezroczystym obszarze. Jak temu zapobiec?

Z góry dziękuję.

Pozdrawiam, Ranjan

+0

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

+0

Gdy używasz 'CGRect' dla obu z nich, oba będą prostokąty. Musisz użyć innej metody. – Dustin

Odpowiedz

2

Na coś tak prostego jak Twoim konkretnym przykładzie (trójkąt i okrąg), odnośnik, że Dawid Rönnqvist daje jest bardzo przydatna. Powinieneś na to spojrzeć, aby zobaczyć dostępne narzędzia. Jednak w ogólnym przypadku najlepiej jest obcinać, rysować i przeszukiwać.

Dla niektórych środowisk zobacz Clipping a CGRRect to a CGPath.

Najpierw utwórz obraz bitmapowy alfa. Zostało to wyjaśnione w powyższym linku.

Następnie przyciąć kontekst do jednego ze zdjęć za pomocą CGContextClipToMask().

Teraz narysuj inny obraz w kontekście.

Na koniec wyszukaj dane bitmapowe dla kolorowych pikseli (patrz powyższy link na przykład kod).

Jeśli którykolwiek z pikseli jest kolorowy, występuje pewne nakładanie się.


Innym, podobnym podejściem (które w rzeczywistości może być szybciej), jest zwrócenie każdy obraz na własnej alfa-tylko CGBitmapContext. Następnie chodź po pikselach w każdym kontekście i zobacz, czy kiedykolwiek oba są jednocześnie 128 w tym samym czasie.

Powiązane problemy