2009-09-17 3 views
3

CGRectMake를 사용하는 대신 특정 모양의 다각형을 사용하여 터치 된 영역을 확인하는 또 다른 방법이 있는지 궁금합니다.그냥 사각형이 아닌 영역을 확인하는 더 나은 방법

다음은이 예를 들어 동일한 코드입니다 :

CGPoint location = [[Director sharedDirector] convertCoordinate: [touch locationInView: [touch view]]]; 
CGRect mySurface = CGRectMake(x, y, temp.contentSize.width, temp.contentSize.height); 

if(CGRectContainsPoint(mySurface, location)) { 
    // do something 
    return kEventHandled; 
} 

은 if 문에 여러 CGRect 객체를 가지고 생각했지만, HTML에서 이미지 맵과 같은 같은 것을 할 수있는 더 좋은 방법이 있다면 궁금 해서요 앵커 용.

답변

3

는 CGPath을 고려

경로를 생성, 사용할 수있는 많은 GPath 기능이 있습니다. 그런 다음 사용하십시오 :

점이 그래픽 경로에 포함되어 있는지 확인하십시오.

bool CGPathContainsPoint (
    CGPathRef path, 
    const CGAffineTransform *m, 
    CGPoint point, 
    bool eoFill 
); 
+0

특정 곡선 이미지의 경로를 생성하는 방법에 대해 궁금합니다. 커브는 두께를 가지고 있지만, 그 경우 CGPathRef에 대한 경로를 어떻게 생성합니까? 내가 이해하는 바로는 배열 내의 모든 점의 배열 일뿐입니다. 그러나 포인트가 정적이지 않은 경우 어떻게 감지 할 수 있습니까? – Frank

0

또는 Box2D 또는 Chipmunk와 같은 물리 엔진을 사용하여 충돌을 처리 할 수 ​​있습니다. 두 엔진이 모두 cocos2D에 통합되어 있습니다. 이 방법으로 원, 사각형, 다각형을 정의 할 수 있으며 충돌이 처리됩니다. 내가 이것을 측정하지는 않았지만 정확하고 아마도 빠릅니다. 단점이라면이 물리학 세계를 개체와 동기화시켜야하며 약간의 시간이 걸리는 모든 것을 설정해야합니다.

질문은 항상 그렇습니다. 정확하거나 간단한 경계 상자로 충분합니까?!

+0

여기에 chipmunk 또는 box2d 충돌 감지의 샘플 코드를 넣을 수 있습니까? – AliBZ