플밍

미사일 터렛을 터치한 곳쪽으로 바라보게 회전하기 본문

프로그래밍/cocos2d-x

미사일 터렛을 터치한 곳쪽으로 바라보게 회전하기

너구리안주 2013. 9. 25. 22:21



미사일터렛을 터치한 곳을 바라보도록 회전시키는 부분이다.
산수도 제대로 공부 안 한 덕에 이해가 빨리 안되어서 정리해 둔다.

#ads_1

// location //터치한 좌표

// player // 터렛

//shootVector = 터치좌표 - 터렛좌표
CCPoint shootVector = ccpSub(location, player->getPosition());

//좌표값으로 각도를 구한다(라디안값으로 리턴됨)
float radAngle = ccpToAngle(shootVector);

//라디안값을 degree로 변환한다. (목표각도)
float degreeAngle = CC_RADIAN_TO_DEGREES(-1 * radAngle);

//현재각도와 목표각도의 각도차이를 구한다.
//CCRotateTo 액션은 가까운 쪽 방향으로 회전하기 때문에 각도의 값을 조정한다.
//=> 270이면 왼쪽으로 -90 까지 돌리는게 빠르다. 방향은 어차피 같기 때문에


float degreeDiff = 0.0f;
if(degreeAngle > 180){
    degreeDiff -= 360;
}else if(degreeAngle < -180){
    degreeDiff += 360;
}

//평균속도를 구한다.
// S(거리) = V(속도) * T(시간)
// V = S/T
// T = S/V
//180를 도는데 평균 0.5가 걸리게 임의로 정하는 것임

float speed =  180 / 0.5;

// 목표각도까지 이동하는데 걸리는 시간
// T = S / V;

float duration = fabsf( degree / speed );  //절대값으로 구함

//구한값들로 목표각도에 다다를때까지 애니메이션을 실행한다.
CCActionInterval* actRotate = CCRotateTo::create( duration, degreeAngle );
...
player->runAction(act);


#ads_1

Comments