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