Chắc chắn, tôi đã phải tìm ra điều đó cho trò chơi Star Catch của tôi. Có thể có những cách tốt hơn để làm điều đó nhưng đây là cách tôi đã làm nó. Tôi thực sự tìm thấy thuật toán trực tuyến (xin lỗi tôi không thể nhớ nguồn) Tôi đã thực hiện tìm kiếm để phát hiện một điểm bên trong đa giác.
Tôi đã tạo một NSMutableArray để giữ quan điểm của mình. Tôi thêm các điểm trong touchevents của tôi.
- (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;
}
Hãy cho tôi biết nếu điều này là hữu ích.