追踪导弹的实现其实就是不断的计算导弹与目标的角度之差,过程如下图
有了上面思路就可以按以下代码实现
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 missileAngle = to360Angle(this->getRotation());
float tempAngle;//下一帧旋转时所需要的角度,下面的CHANGE_DEGREE是变化角度,如5度,也就是下一帧导弹的角度会顺时针或逆时针旋转5度,知道与目标角度相等
//下

本文介绍了追踪导弹的实现原理,核心在于不断计算导弹与目标之间的角度差。通过这个思路,可以编写相应的代码来实现导弹的精确追踪。
最低0.47元/天 解锁文章
6161

被折叠的 条评论
为什么被折叠?



