|
一个飞机游戏里的跟踪导弹的计算,有问题,请大家帮忙看看怎么改。
整个坐标是在屏幕坐标中。
void UpdateMissile( MISSILE_STRUCT* pMissile, FLOAT fTimeDelta )
{
//pMissile->KeepTime--;//用来改变导弹的作用时间的。先不考虑
//if(pMissile->KeepTime<=0)
//pMissile->Exist=false;
float h=MyPlane.Common.fPosY-pMissile->Common.fPosY;//坐标的差值
float w=MyPlane.Common.fPosX-pMissile->Common.fPosX;
float d=sqrt(w*w+h*h);//两点距离
if(d<0.001)
d=0.001;
double Angle=acos(abs(w)/d);//计算两点与水平方向的夹角
if(w>=0)
{
if(h>=0)
{
if(Angle>=0 && Angle<0.3926)//0到22.5度的弧度值
{
pMissile->ImageIndex=3;//导弹的图片序数。大家先不看。
}
else if(Angle>=0.3926 && Angle<1.178)
{
pMissile->ImageIndex=4;
}
else if(Angle>1.178 && Angle<1.571)
{
pMissile->ImageIndex=5;
}
pMissile->Common.fVelX=pMissile->Speed*cos(Angle);//重新计算新的速度
pMissile->Common.fVelY=pMissile->Speed*sin(Angle);
}
else if(h<0)
{
if(Angle>=0 && Angle<0.3926)
{
pMissile->ImageIndex=3;
}
else if(Angle>=0.3927 && Angle<1.178)
{
pMissile->ImageIndex=2;
}
else if(Angle>1.178 && Angle<1.571)
{
pMissile->ImageIndex=1;
}
pMissile->Common.fVelX=pMissile->Speed*cos(Angle);//重新计算新的速度
pMissile->Common.fVelY=-pMissile->Speed*sin(Angle);
}
}
else if(w<0)
{
if(h>=0)
{
if(Angle>=0 && Angle<0.3926)
{
pMissile->ImageIndex=7;
}
else if(Angle>=0.3927 && Angle<1.178)
{
pMissile->ImageIndex=6;
}
else if(Angle>1.178 && Angle<1.571)
{
pMissile->ImageIndex=5;
}
pMissile->Common.fVelX=-pMissile->Speed*cos(Angle);//重新计算新的速度
pMissile->Common.fVelY=pMissile->Speed*sin(Angle);
}
else if(h<0)
{
if(Angle>=0 && Angle<0.3926)
{
pMissile->ImageIndex=7;
}
else if(Angle>=0.3927 && Angle<1.178)
{
pMissile->ImageIndex=8;
}
else if(Angle>1.178 && Angle<1.571)
{
pMissile->ImageIndex=1;
}
pMissile->Common.fVelX=-pMissile->Speed*cos(Angle);//重新计算新的速度
pMissile->Common.fVelY=-pMissile->Speed*sin(Angle);
}
}
pMissile->Common.fPosX+=Missile->Common.fVelX*fTimeDelta;//计算新的位置
pMissile->Common.fPosY+=Missile->Common.fVelY*fTimeDelta;
if(pMissile->Common.fPosX<-20 || pMissile->Common.fPosX>1040
|| pMissile->Common.fPosY<-20 || pMissile->Common.fPosY>780 )
{
pMissile->Exist=false;//出界,设置为不存在
}
}
我第一次做,数学高手来看看。我的方法很笨,请教更好的算法。帮我检查错误(有的数值类型没转换,不知道会
不会有错),我在运行时,出现错误的症状:飞机在导弹 的右下方为正常,其它位置导弹都消失了。不知道角度用
什么来计算比较好。如果用atan()好象不如acos()。高手指教。急!! |
|