충돌체크는 보통 사각형과 사각형, 또는 원과 원사이의 충돌을 가장 많이 사용한다.
1. 사각형 간의 충돌
우선 사각형 사이의 충돌은 가장 편하게 구현할 수 있는데
getBoundingBox()라는 함수를 사용하여 해당 오브젝트의 크기만큼 사각형(Rect) 범위를 만들 수 있다.
1 2 3 4 5 6 7 8 | auto gl = (GameLayer*)getParent()->getParent(); auto pHero = gl->getChildByTag(105); auto up = getChildByName("UP"); auto down = getChildByName("DOWN"); Rect heroRect = pHero->getBoundingBox(); Rect upRect = up->getBoundingBox(); Rect downRect = down->getBoundingBox(); | cs |
이 사각형은 origin값과 size를 가지고 있는데
origin값은 사각형의 왼쪽아래 시작지점의 x, y 좌표를 가지고 있으며 origin.x, origin.y처럼 원하는값만 찾을 수 있다.
size는 width와 height를 가지고 있어 사각형의 충돌범위를 체크할 수 있다.
사각형의 충돌은 아래처럼 intersectsRect를 사용하면 두 Rect가 겹쳤을 시 true를 리턴하므로 아래처럼 사용하면 된다.
1 2 3 4 | if (heroRect.intersectsRect(upRect)) { pHero->removeFromParent(); } | cs |
2. 원 사이의 충돌
원 사이의 충돌은 두 중점 사이의 거리와 반지름을 이용한다.
두 중점 사이의 길이(r)가 두 원의 반지름의 합(a+b) 보다 크면 충돌이 아닐 것이고,
길이가 반지름의 합보다 작다면 충돌일 것이다.
1 2 3 4 | Point tp = tank->getPosition(); Point bp = barrier->getPosition(); Point bdir = bp - tp; float tblength = bdir.length(); | cs |
이런 식으로 getPosition()을 통해 중점을 얻어 길이를 계산하면 충돌인지 아닌지 판단할 수 있을 것이다.
'프로그래밍 공부 > cocos2d-x' 카테고리의 다른 글
Flappy Bird 게임 만들기 - 2 (0) | 2018.03.27 |
---|---|
Flappy Bird 게임 만들기 - 1 (0) | 2018.03.27 |
터치, 마우스, 키보드 사용하기 (0) | 2018.03.27 |
오브젝트 삭제하기 (0) | 2018.03.26 |
Update 사용하기 (0) | 2018.03.26 |