游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1585|回复: 4

求救先

[复制链接]

17

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2004-6-3 14:14:00 | 显示全部楼层 |阅读模式
一个飞机游戏里的跟踪导弹的计算,有问题,请大家帮忙看看怎么改。
整个坐标是在屏幕坐标中。
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()。高手指教。急!!

17

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
 楼主| 发表于 2004-6-3 16:59:00 | 显示全部楼层

Re:求救先

笨!标题太烂,自己顶一个,望有人回答。

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2004-6-3 21:46:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2004-6-3 21:46:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

5

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
发表于 2004-6-3 23:54:00 | 显示全部楼层

Re:求救先

不知道这为兄弟有些变量是什么意思,能不能说明下,我以前也做个飞机游戏。:)
我大概读了下代码,估计是角度函数不对。
(个人认为:))
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-1 16:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表