충돌체크는 보통 사각형과 사각형, 또는 원과 원사이의 충돌을 가장 많이 사용한다.


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
Posted by misty_
,