Claro, eu tive que descobrir isso para o meu jogo Star Catch. Pode haver maneiras melhores de fazer isso, mas foi assim que eu fiz. Na verdade, encontrei o algoritmo on-line (desculpe, não me lembro da fonte). Fiz uma pesquisa para detectar um ponto dentro de um polígono.
Eu criei um NSMutableArray para manter meu argumento. Eu adiciono os pontos nos meus touchevents.
- (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;
}
Deixe-me saber se isso é útil.