2012-08-09 14 views
5

enter image description heredetección de colisiones de formas irregulares en IOS

Hola chicos,

estoy trabajando en arrastrar y soltar la actividad para el iPad. Tengo una imagen rectangular .png (vea la imagen nombrada como obj2). Cuando arrastro obj1 solo en la parte negra del rectángulo, debería reaccionar.

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

En este momento, este trozo de código tiene éxito incluso en el área transparente. ¿Cómo evitar que eso suceda?

Gracias de antemano.

Saludos, Ranjan

+0

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

+0

Cuando usa 'CGRect' para ambos, ambos serán rectángulos. Necesitas usar un método diferente. – Dustin

Respuesta

2

Para algo tan simple como su ejemplo específico (triángulo y círculo), el enlace que David Rönnqvist da es muy útil. Definitivamente deberías mirarlo para ver algunas herramientas disponibles. Pero para el caso general, la mejor opción es cortar, dibujar y buscar.

Para obtener más información, consulte Clipping a CGRRect to a CGPath.

Primero, cree una imagen de mapa de bits solo alfa. Esto se explica en el enlace de arriba.

A continuación, recorta tu contexto en una de tus imágenes usando CGContextClipToMask().

Ahora, dibuje su otra imagen en el contexto.

Finalmente, busque en los datos del mapa de bits los píxeles de color (consulte el enlace anterior para obtener un código de ejemplo).

Si alguno de los píxeles está coloreado, existe una superposición.


Otro enfoque similar (que en realidad podría ser más rápido), es necesario dibujar cada imagen en su propio alfa-CGBitmapContext única. Luego recorra los píxeles en cada contexto y vea si alguna vez son ambos> 128 al mismo tiempo.

Cuestiones relacionadas