追踪导弹的实现其实就是不断的计算导弹与目标的角度之差,过程如下图
有了上面思路就可以按以下代码实现
void Missile::update(float dt) {
CCPoint targetPos = this->_target->getPosition();
CCPoint p = this->getPosition();
//计算导弹与目标的弧度
float radian = atan2f(targetPos.y - p.y + this->_distance, targetPos.x - p.x + this->_distance);
//将弧度转换为角度,因为cocos2d-x的角度旋转式按顺时针旋转,所以这里要将角度取反,
//例如,以导弹的坐标为原点,目标在导弹的第一象限,那么不加负数则导弹会往第四象限旋转(因为是顺时针旋转),所以取反后,按逆时针旋转,就可计算出正确的旋转角度
float targetAngle = -CC_RADIANS_TO_DEGREES(radian);
//将角度按360度转换,得到目标旋转角度
targetAngle = to360Angle(targetAngle);
//导弹角度也按360度转换,得到导弹的当前角度
float missile