可以选择不同的预定义3d飞机模型,可控制飞机的飞行速度、飞行模式
进入系统可以选择飞机飞行的的场景,来观察模拟飞行的效果, 程序根据其用户需要提供其可利用的菜单项,然后通过菜单访问各个模块。其选择飞行场景界面如图3-1所示
本模块实现的技术关键在于对点击飞机一,飞机二选择时的判断.载入预先设置好的飞机3d模型.
DlgStart::DlgStart(CWnd* pParent /*=NULL*/)
: CDialog(DlgStart::IDD, pParent)
{
//{{AFX_DATA_INIT(DlgStart)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_iAirModel=1;
}
void DlgStart::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DlgStart)
DDX_Control(pDX, IDC_BTNSTART, m_btStart);
DDX_Control(pDX, IDC_BTNAIRTOW, m_btAirTwo);
DDX_Control(pDX, IDC_BTNAIRONE, m_btAirOne);
//}}AFX_DATA_MAP
}
3.3控制飞机状态
控制飞机的飞行状态是有键盘上方向键来控制的. 其模拟飞机飞行的状态界面如图3-2所示
void CAircraftView::MovePlane(void)
{
register float dx,dz;
dx=m_aircaft.vel*cos((90+m_aircaft.an)*3.141/180);
dz=m_aircaft.vel*sin((90+m_aircaft.an)*3.141/180);
if(AIRMODEL==1)
{
m_aircaft.x+=dx;
m_aircaft.z+=dz;
}
else
{
m_aircaft.x-=dx;
m_aircaft.z-=dz;
}
if(m_aircaft.x<-4000)
m_aircaft.x=4000;
if(m_aircaft.x>4000)
m_aircaft.x=-4000;
if(m_aircaft.z<-4000)
m_aircaft.z=4000;
if(m_aircaft.z>4000)
m_aircaft.z=-4000;
}
3.4飞行背景切换
当飞机飞行的时候可以通过上面的背景切换状态来切换飞机飞行的背景. 其模拟飞机飞行背景切换界面如图3-3所示
3.5切换飞行状态
按下键盘上的m键,飞机可以实现尾气排放,也就是可切换飞机的状态,1是 不可控制状态,飞机自由飞翔,2是飞机接收键盘方向键控制.
void CAircraftView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
// Camera position
if(nChar==VK_LEFT)
Ioan+=2;
if(nChar==VK_RIGHT)
Ioan-=2;
if(nChar==VK_UP)
{
m_aircaft.vel+=0.1;
if(m_aircaft.vel>30)
m_aircaft.vel=30;
}
if(nChar==VK_DOWN)
{
m_aircaft.vel-=0.1;
if(m_aircaft.vel<3)
m_aircaft.vel=3;
}
if(nChar==83) // 按下'S'键
{
if(m_bSky==false)
m_bSky=true;
else
m_bSky=false;
}
if(nChar==77) // 按下'M'键
{
if(m_bSmoke==false)
m_bSmoke=true;
else
m_bSmoke=false;
}
// 视点模式
if(nChar==49) // 按下'1'键
{
m_iCameraType=0;
}
if(nChar==50) // 按下'2'键
{
m_iCameraType=1;
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}