Dev/iOS-cocos2d2011. 8. 5. 12:03

좌표(터치)를 이용하여 특정 스프라이트 터치 체크하는 방법

체크는 CGRectContainsPoint 메소드 사용. 참고:( http://goo.gl/BQ2HQ )

CGRectContainsPoint 에 필요한 인자값은 Rect 와 Point

Rect(사각형 스프라이트) 안에 Point 가 있는지 체크하는 메소드 입니다.

사각형 범위를 가져오기 위해서는 해당 sprite의 position과 width, height 를 이용하여 범위를 가져와야 합니다.

cocos2d 에서는 이것을 boundingBox 메소드를 이용하여 쉽게 가져올 수 있습니다.

CGPoint touchPoint = [touch locationInView:[touch view]];

touchPoint = [[CCDirector sharedDirector] convertToGL:touchPoint];

CCSprite *sprite = [CCSprite spriteWitheFile:@"파일명"];

if (CGRectContainsPoint([sprite boundingBox], touchPoint)) {

    NSLog(@"해당 스프라이트 터치 성공.");

} else {

    NSLog(@"해당 스프라이트 터치 안됨.");

}


진작에 쓸걸... 그동안 position, width, height 계산한걸 생각하면.... -_-;;



Posted by 놀란

댓글을 달아 주세요

  1. safsdf

    감사합니다 사랑해요

    2013.06.03 16:22 [ ADDR : EDIT/ DEL : REPLY ]

Dev/iOS-cocos2d2011. 7. 12. 14:12

- (CGPoint)convertToNodeSpace:(CGPoint)worldPoint

worldPoint(전체 화면상의 좌표) 값을 특정노드(스프라이트, 레이어 포함) 기준의 좌표값으로 변경


- (CGPoint)convertToWorldSpace:(CGPoint)nodePoint

특정노드(스프라이트, 레이어 포함)에서의 좌표값을 worldPoint(전체 화면상의 좌표) 기준의 좌표값으로 변경


Posted by 놀란

댓글을 달아 주세요

  1. 비밀댓글입니다

    2011.08.15 15:20 [ ADDR : EDIT/ DEL : REPLY ]
    • 안녕하세요.

      몸 sprite 위에 얼굴 등의 sprite를 addchild 했으면, 이미 상대적인 좌표로 들어가게 되겠네요.

      - (CGPoint)convertToWorldSpace:(CGPoint)nodePoint

      이용하시면 되겠지요?

      터치 좌표는 월드 좌표인데, 몸 sprite 기준으로 상대적인 좌표값(머리 등)이 나오니 엉뚱한 터치 영역을 체크하고 있겠네요.

      [self convertToWorldSpace: 머리 sprite] 이런 식으로 레이어에서의 월드좌표 값을 가져오고 그 좌표값이 터치부분에 들어가있는지 보면 될 것 같습니다.

      그리고 다른 방법으로는 몸에 addchild 할때 터치영역을 만들어주는건 어떨까요?
      몸 sprite rect에 머리 붙일때의 최대값(최대값 가져오는건 제 포스팅에 있습니다.) 가져와서 x, y 값을 늘려주고 팔 붙이면서 오른쪽 x 값 늘려주고 해서 최종 rect 값을 터치영역으로 해서 CGRectContainsPoint 메소드로 체크해도 될 듯 싶습니다.

      저도 할때마다 헷갈려요.. ^^;;
      맞는 답변이길...

      2011.08.22 11:18 신고 [ ADDR : EDIT/ DEL ]
  2. 터치하는 좌표와 맵 이동시에 나오는 좌표가 계속 틀려서 고민하고 있었는데 덕분에 해결했습니다. 감사합니다. ^^

    2012.09.26 04:04 신고 [ ADDR : EDIT/ DEL : REPLY ]

Dev/iOS-cocos2d2011. 7. 11. 11:00

배경 등과 같은 스프라이트 이미지 2개를 나란히 붙였을 때,

가는 실선이 나타나는 것을 볼 수 있는데, 이렇게 두 이미지가 만나는 부분에 검은색 실선이 보이는 이유는 기본적으로 안티앨리어싱( anti-aliasing)이 켜져있기 때문이다.

검은색 실선을 보이지 않게 하려면 아래 코드를 이용하여 안티앨리어싱 기능을 끄면 된다.

[targetSprite1.texture setAliasTexParameters];

[targetSprite2.texture setAliasTexParameters];



Posted by 놀란

댓글을 달아 주세요