Claro, tuve que resolver eso para mi juego Star Catch. Puede haber mejores formas de hacerlo, pero así es como lo hice. En realidad encontré el algoritmo en línea (lo siento, no recuerdo la fuente) Hice una búsqueda para detectar un punto dentro de un polígono.
Creé un NSMutableArray para mantener mi punto. Añado los puntos en mis eventos.
- (BOOL) testNodeInLoop:(CCNode *)node {
CGPoint prev;
// This is more accurate point for the node
CGPoint absPoint = [node convertToWorldSpace:CGPointZero];
float x = absPoint.x;
float y = absPoint.y;
BOOL isIn = NO;
CGPoint cp;
for(int i = 0, j = [points count] - 1; i < [points count]; j = i++) {
[[points objectAtIndex:i] getValue:&cp];
[[points objectAtIndex:j] getValue:&prev];
if( ((cp.y > y) != (prev.y > y)) && (x < (prev.x -cp.x) * (y - cp.y) / (prev.y - cp.y) + cp.x)) {
isIn = !isIn;
}
}
return isIn;
}
Avísame si esto es útil.