Bien sûr, je devais comprendre cela pour mon jeu Star Catch. Il y a peut-être de meilleures façons de le faire, mais c'est comme ça que je l'ai fait. J'ai trouvé l'algorithme en ligne (désolé, je ne me souviens pas de la source). J'ai fait une recherche pour détecter un point à l'intérieur d'un polygone.
J'ai créé un NSMutableArray pour maintenir mon point. J'ajoute les points dans mes évents tactiles.
- (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;
}
Faites-moi savoir si cela est utile.