📄 game_game.cpp
字号:
}
if(m_MagicAttack = m_presNpc[m_i]->m_selectAttack)
{
m_MagicPos = m_presNpc[m_i]->m_vPos;
}
if(m_pMagicPoPo->m_dwMagicNum)
{
m_pRole->m_CURMP -=m_pMagicPoPo->m_dwMagicNum * 2.0f;
m_pMagicPoPo->m_dwMagicNum = 0;
}
static int a=0;
a++;
if(m_MagicAttack && m_pRole->m_CURMP >=0.1f && (0x80&m_pInput->GetIsKeyDown(DIK_1))&&!m_pRole->m_isdead&&!m_presNpc[m_i]->m_isdead)
{
if( m_pRole->m_bLoop==TRUE)
{
m_pRole->SetAnimationName( "skill2" );
m_pMagicPoPo->m_bLive = true;
}
}
if((m_pRole->m_pCurAnimSet->GetName()=="skill2"&&a==1)||m_pRole->m_CURMP <= 0.1f)
{
a=0;
m_pMagicPoPo->m_bLive = false;
m_pMagicPoPo->m_bMoving = true;
m_pRole->m_fAngle = m_pRole->GetYaw(m_presNpc[m_i]->m_vPos,m_pRole->m_vPos);
}
if(0x80&m_pInput->GetIsKeyDown(DIK_2)&&m_pRole->m_CURMP >=0.1f&&!m_pRole->m_isdead&&m_pRole->DistanceOfTwoVec3(m_pRole->m_vPos, m_presNpc[m_i]->m_vPos) <= 50.0f)
{
m_pRole->SetAnimationName( "skil1" );
m_presNpc[m_i]->m_CURHP -=1.0f;
//m_pRole->m_CURMP -=2.0f;
}
/*if(0x80&m_pInput->GetIsKeyDown(DIK_1))
{
if (m_p3DUI->m_pEquip->m_ppbutton[0][0]!=NULL)
{
m_p3DUI->m_pEquip->m_ppbutton[0][0]->p(m_pRole);
if (m_p3DUI->m_pEquip->m_ppbutton[0][0]->del)
{
delete (m_p3DUI->m_pEquip->m_ppbutton[0][0]);
m_p3DUI->m_pEquip->m_ppbutton[0][0]=NULL;
}
}
}
if(0x80&m_pInput->GetIsKeyDown(DIK_2))
{
if (m_p3DUI->m_pEquip->m_ppbutton[0][1]!=NULL)
{
m_p3DUI->m_pEquip->m_ppbutton[0][1]->p(m_pRole);
if (m_p3DUI->m_pEquip->m_ppbutton[0][1]->del)
{
delete (m_p3DUI->m_pEquip->m_ppbutton[0][1]);
m_p3DUI->m_pEquip->m_ppbutton[0][1]=NULL;
}
}
}
if(0x80&m_pInput->GetIsKeyDown(DIK_3))
{
if (m_p3DUI->m_pEquip->m_ppbutton[0][2]!=NULL)
{
m_p3DUI->m_pEquip->m_ppbutton[0][2]->p(m_pRole);
if (m_p3DUI->m_pEquip->m_ppbutton[0][2]->del)
{
delete (m_p3DUI->m_pEquip->m_ppbutton[0][2]);
m_p3DUI->m_pEquip->m_ppbutton[0][2]=NULL;
}
}
}
if(0x80&m_pInput->GetIsKeyDown(DIK_4))
{
if (m_p3DUI->m_pEquip->m_ppbutton[0][3]!=NULL)
{
m_p3DUI->m_pEquip->m_ppbutton[0][3]->p(m_pRole);
if (m_p3DUI->m_pEquip->m_ppbutton[0][3]->del)
{
delete (m_p3DUI->m_pEquip->m_ppbutton[0][3]);
m_p3DUI->m_pEquip->m_ppbutton[0][3]=NULL;
}
}
}
if(0x80&m_pInput->GetIsKeyDown(DIK_5))
{
if (m_p3DUI->m_pEquip->m_ppbutton[0][4]!=NULL)
{
m_p3DUI->m_pEquip->m_ppbutton[0][4]->p(m_pRole);
if (m_p3DUI->m_pEquip->m_ppbutton[0][4]->del)
{
delete (m_p3DUI->m_pEquip->m_ppbutton[0][4]);
m_p3DUI->m_pEquip->m_ppbutton[0][4]=NULL;
}
}
}
if(0x80&m_pInput->GetIsKeyDown(DIK_6))
{
if (m_p3DUI->m_pEquip->m_ppbutton[0][5]!=NULL)
{
m_p3DUI->m_pEquip->m_ppbutton[0][5]->p(m_pRole);
if (m_p3DUI->m_pEquip->m_ppbutton[0][5]->del)
{
delete (m_p3DUI->m_pEquip->m_ppbutton[0][5]);
m_p3DUI->m_pEquip->m_ppbutton[0][5]=NULL;
}
}
}
if(0x80&m_pInput->GetIsKeyDown(DIK_7))
{
if (m_p3DUI->m_pEquip->m_ppbutton[0][6]!=NULL)
{
m_p3DUI->m_pEquip->m_ppbutton[0][6]->p(m_pRole);
if (m_p3DUI->m_pEquip->m_ppbutton[0][6]->del)
{
delete (m_p3DUI->m_pEquip->m_ppbutton[0][6]);
m_p3DUI->m_pEquip->m_ppbutton[0][6]=NULL;
}
}
}
if(0x80&m_pInput->GetIsKeyDown(DIK_8))
{
if (m_p3DUI->m_pEquip->m_ppbutton[0][7]!=NULL)
{
m_p3DUI->m_pEquip->m_ppbutton[0][7]->p(m_pRole);
if (m_p3DUI->m_pEquip->m_ppbutton[0][7]->del)
{
delete (m_p3DUI->m_pEquip->m_ppbutton[0][7]);
m_p3DUI->m_pEquip->m_ppbutton[0][7]=NULL;
}
}
}*/
if(0x80&m_pInput->GetIsKeyDown(DIK_B)&&!Key_b)
{
Key_b=true;
time=0.0f;
//m_p3DUI->m_pBag->m_bVisrul=m_p3DUI->m_pBag->m_bVisrul?false:true;
////if (m_p3DUI->m_pBag->m_bVisrul)
////{
//// m_p3DUI->m_pBag->m_bVisrul=false;
////}else
////{
//// m_p3DUI->m_pBag->m_bVisrul=true;
////}
}
//else
//{
// if (Key_b)
// {
// time+=m_tFrameTime;
// }
// if (time>0.3f)
// {
// Key_b=false;
// time=0.0f;
// }
//}
//if (!list)
//{
// if (m_p3DUI->m_bIs)
// {
// m_p3DUI->UpDate();
// }
// m_p3DUI->m_bIs=false;
//}
//人物向前移动
m_pRole->WalkFoward(dForward, nDirect);
//处理碰撞
ProcessCollision();
if(m_pRole->m_isdead)
{
m_pRole->m_vPos.y -= 0.1f;
}
else
{
//重新设置人物的高度信息
m_pRole->GetPosition(&m_RoleHeight);
m_RoleHeight.y = m_pTerrain->GetHeight(m_pRole->GetPosition().x,
m_pRole->GetPosition().z);
m_pRole->SetPosition(&m_RoleHeight);
}
//设置摄像机位置
m_pCamera->SetLookAt(&(m_pRole->GetPosition()+D3DXVECTOR3(0,35,0)));
//自动回血
static int num_HP = 0;
if(num_HP%2000 == 0 && m_pRole->m_CURHP < m_pRole->m_MAXHP && (!m_pRole->m_isAttacking))
{
m_pRole->m_CURHP += 0.05f;
}
//自动回魔法
static int num_MP = 0;
if(num_MP%2000 == 0 && m_pRole->m_CURMP < m_pRole->m_MAXMP && (!m_pRole->m_isAttacking))
{
m_pRole->m_CURMP += 0.01f;
}
//NPC AI
for(i = 0; i < m_pNpcNum; i++)
{
m_presNpc[i]->AI(m_pRole, m_tFrameTime, 100.0f);
}
for(i = 0; i < m_pNpcNum; i++)
{
if(m_presNpc[i]->m_isdead)
{
m_presNpc[i]->m_IsEnemyHPMP = false;
m_presNpc[i]->m_vPos.y -= 0.1f;
}
else
{
m_presNpc[i]->SetAltitude(m_pTerrain->GetHeight(m_presNpc[i]->GetPosition().x,
m_presNpc[i]->GetPosition().z));
}
}
//如果摄像机进到山里就将摄像机前推
while( (m_pCamera->GetPos())->y <= m_pTerrain->GetHeight( (m_pCamera->GetPos())->x,
(m_pCamera->GetPos())->z) )
{
m_pCamera->m_Distance -= 10;
m_pCamera->SetLookAt(&(m_pRole->GetPosition()+D3DXVECTOR3(0,20,0)));
}
return true;
}
bool CGame::Attack()
{
POINT p;
GetCursorPos( &p );
if( (0x80 & m_pInput->GetIsKeyDown(MK_LEFT)) && !m_pRole->m_isdead
&& p.x >=90 && p.x <= 110 && p.y >= 730 && p.y <= 750 )
{
return true;
}
return false;
}
HRESULT CGame::DrawShadow(IDirect3DDevice9* m_pd3dDevice)
{
//关闭深度测试, 启用Alpha混合
m_pd3dDevice->SetRenderState( D3DRS_ZENABLE, false );
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, true );
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
//设置模板相关渲染状态
m_pd3dDevice->SetRenderState( D3DRS_STENCILENABLE, true );
m_pd3dDevice->SetRenderState( D3DRS_STENCILREF, 0x1 );
m_pd3dDevice->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_LESSEQUAL );
m_pd3dDevice->SetRenderState( D3DRS_STENCILPASS, D3DSTENCILOP_KEEP );
//渲染一个灰色矩形, 只有通过模板测试的像素才会被渲染到颜色缓冲区,表示阴影
m_pd3dDevice->SetFVF( D3DFVF_CUSTOM_SHADOWVERTEX );
m_pd3dDevice->SetStreamSource( 0, m_pBigSquareVB, 0, sizeof(SHADOWVERTEX) );
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
//恢复渲染状态
m_pd3dDevice->SetRenderState( D3DRS_ZENABLE, true );
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, false );
m_pd3dDevice->SetRenderState( D3DRS_STENCILENABLE, false );
return S_OK;
}
bool CGame::Render()
{
static float m_timeNow = timeGetTime()/1000.0f;
m_tFrameTime = timeGetTime()/1000.0f-m_timeNow; //后一时刻减前一时刻
m_timeNow += m_tFrameTime; //更新前一时刻
FrameStart(m_tFrameTime);
m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL,
D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );
if( SUCCEEDED( m_pd3dDevice->BeginScene() ) )
{
//更新3D变换矩阵
m_pCamera->Update3DMatrix(m_tFrameTime);
if(m_pRole->m_isMoving)
{
if(m_IsWalk)
{
m_pRole->SetAnimationName("walk");
m_pRole->SetSpeed(50.0f);
}
else
{
m_pRole->SetAnimationName("run");
m_pRole->SetSpeed(150.0f);
}
m_pRole->MoveTo(m_pRole->m_vTarget, m_tFrameTime, m_pRole->m_speed1);
if( ProcessCollision() )
m_pRole->m_isMoving = false;
}
//绘制天空盒
m_pSkyBox->SetPosition( m_pCamera->GetPos() );
m_pSkyBox->Render( m_tFrameTime );
//绘制主角及AABB盒
m_pRole->Render( m_tFrameTime);
static D3DXVECTOR3 vMin, vMax;
m_pRole->GetBoundingBox( &vMin, &vMax );
if( m_IsAABB )
{
RenderAABB( m_pd3dDevice, &vMin, &vMax );
}
//绘制怪物及AABB盒
for(i = 0; i < m_pNpcNum; i++)
{
m_presNpc[i]->Render(m_tFrameTime);
}
for(i = 0; i < m_pNpcNum; i++)
{
m_presNpc[i]->GetBoundingBox( &vMin, &vMax );
if(m_IsAABB)
{
RenderAABB( m_pd3dDevice, &vMin, &vMax );
}
}
//绘制商店NPC
m_pNpc->Render(m_tFrameTime);
//魔法阵
if(m_pMagicPoPo->m_bMoving ==false&&m_pMagicPoPo->m_bLive ==true)
{
m_pMagicZhen->SetPosition( m_pRole->m_vPos.x, m_pRole->m_vPos.y, m_pRole->m_vPos.z );
m_pMagicZhen->Render(m_tFrameTime);
}
if( m_IsAABB )
{
m_pNpc->GetBoundingBox( &vMin, &vMax);
RenderAABB( m_pd3dDevice, &vMin, &vMax );
}
//设置宫殿的世界变换 缩放 X值 Y值 Z值 旋转
m_pTempler->setTransform(4.0f, -900.0f, 8.0f, 2000.0f, 0.0f);
//绘制宫殿
m_pTempler->Render();
if( m_IsAABB )
{
m_pTempler->GetBoundingBox( &vMin, &vMax ,0.9f);
RenderAABB( m_pd3dDevice, &vMin, &vMax );
}
//设置雕像的世界变换 缩放 X值 Y值 Z值 旋转
m_pGlyph->setTransform( 50.0f, -1000.0f, 0.0f, 1200.0f,0.0f);
//绘制雕像
m_pGlyph->Render();
if( m_IsAABB )
{
m_pGlyph->GetBoundingBox( &vMin, &vMax,0.6f);
RenderAABB( m_pd3dDevice, &vMin, &vMax );
}
//设置树1的世界变换 缩放 X值 Y值 Z值 旋转
m_pTree1->setTransform(2.0f,-600.0f, 0.0f, 1200.0f, 0.0f);
m_pTree1->Render();
if( m_IsAABB )
{
m_pTree1->GetBoundingBox( &vMin, &vMax,0.15f);
RenderAABB( m_pd3dDevice, &vMin, &vMax );
}
//绘制树2
m_pTree2->setTransform(2.0f,-1500.0f, 0.0f, 1200.0f, 0.0f);
m_pTree2->Render();
if( m_IsAABB )
{
m_pTree2->GetBoundingBox( &vMin, &vMax,0.15f);
RenderAABB( m_pd3dDevice, &vMin, &vMax );
}
//绘制树3
m_pTree3->setTransform(10.0f,-2330.0f, 10.0f, 800.0f, 0.0f);
m_pTree3->Render();
if( m_IsAABB )
{
m_pTree3->GetBoundingBox( &vMin, &vMax,0.2f);
RenderAABB( m_pd3dDevice, &vMin, &vMax );
}
static int i,j;
for (i=1;i<4;i++)
{
for (j=1;j<5;j++)
{
m_pTree2->setTransform(5.0f,-2800.0f/i, m_pTerrain->GetHeight(-2800.0f/i,-1500.0f*j*i/2)-150, -1500.0f*j*i/2, 0.0f);
m_pTree2->Render();
}
}
//绘制草
m_pGrass->setTransform(0.5f,-1000.0f, 8.0f, 1110.0f, 0.0f);
m_pGrass->Render();
//绘制火堆
m_pFire->setTransform(200.0f,-2150.0f, -5.0f, 1000.0f, 0.0f);
m_pFire->Render();
if( m_IsAABB )
{
m_pFire->GetBoundingBox( &vMin, &vMax,0.5f);
RenderAABB( m_pd3dDevice, &vMin, &vMax );
}
//绘制死骨
m_pBone->setTransform(2.0f,-2050.0f, -5.0f, 440.0f, 0.0f);
m_pBone->Render();
if( m_IsAABB )
{
m_pBone->GetBoundingBox( &vMin, &vMax,0.5f);
RenderAABB( m_pd3dDevice, &vMin, &vMax );
}
//绘制水晶
m_pCrystal->setTransform(0.01f,-2150.0f, 140.0f, 1000.0f, 0.0f);
m_pCrystal->Render();
//绘制地形
m_pTerrain->Render();
//绘制粒子
m_pParticle->Render(m_tFrameTime,&D3DXVECTOR3(-2215,41,960));
//渲染阴影
m_pShadowVolume->Render(m_pd3dDevice, &m_pGlyph->GetMat(), m_bRenderVolume);
DrawShadow(m_pd3dDevice);
//绘制蝴蝶
m_pButterflyMesh1->OnFrameMove(m_pd3dDevice,0.0f,0.0f);
m_pButterflyMesh1->Render();
//主角技能
m_pMagicPoPo->SetPosition(&(m_pRole->m_vPosOld));
m_pMagicPoPo->Render(m_tFrameTime, &m_MagicPos);
//处理2D画面
m_pCamera->Update2DMatrix();
//设置主角血条
m_pPanelRole->MoveTo(0, 20);
m_pPanelRole->Render();
m_pRoleHP->SetRoleHP( (m_pRole->m_CURHP/m_pRole->m_MAXHP) * 12 );
m_pRoleHP->Render();
m_pRoleMP->SetRoleMP( (m_pRole->m_CURMP/m_pRole->m_MAXMP) * 16 );
m_pRoleMP->Render();
for(i = 0; i < m_pNpcNum; i++)
{
if(m_presNpc[i]->m_IsEnemyHPMP==true)
{
m_pPanelEnemy->MoveTo(400, 20);
m_pPanelEnemy->Render();
m_pEnemyHP->SetEnemyHP( (m_presNpc[m_i]->m_CURHP / m_presNpc[m_i]->m_MAXHP) * 9);
m_pEnemyHP->Render();
m_pEnemyMP->SetEnemyMP( (m_presNpc[m_i]->m_CURMP / m_presNpc[m_i]->m_MAXMP) * 12);
m_pEnemyMP->Render();
}
}
//mini地图
m_pSmallMap->Render(m_pRole->m_vPos,m_pRole->m_fAngle);
m_pMiNiMapBar->MoveTo(845, 2);
m_pMiNiMapBar->Render();
//设置技能栏
m_pJiNenglan->MoveTo(20,700);
m_pJiNenglan->Render();
//3DUI
//m_p3DUI->Render();
if(m_bBag==true)
{
m_pNpcBag->MoveTo(200,100);
m_pNpcBag->Render();
}
if( m_isMouseDown )
{
//设置鼠标图片位置
m_pCursor->SetPosition( m_pCursor->m_oldPos );
//设置鼠标真正位置
SetCursorPos( m_pCursor->m_oldPos.x, m_pCursor->m_oldPos.y );
}
else
{
static POINT p;
//取鼠标真正位置
GetCursorPos( &p );
m_pCursor->SetPosition( p );
}
m_pCursor->Render();
m_isMouseDown = false;
RenderText(m_tFrameTime);
m_pd3dDevice->EndScene();
}
m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
return true;
}
bool CGame::GameLoop()
{
MSG msg;
BOOL fMessage;
PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
while(msg.message != WM_QUIT)
{
fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
if(fMessage)
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
if(m_isMP3)
{
m_isMP3 = false;
m_pMP3 = new CSound(m_hWnd);
m_pMP3->Play("\\stormwind01-moment.mp3", MP3);
}
else
{
Render();
}
}
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -