📄 game_hero.cpp
字号:
float y=m_pGame_SkinMesh->GetYaw(*m_pGame_SkinMesh->GetPosition(),m_mouseCross);
m_pGame_SkinMesh->m_fAngle=y;
m_pGame_SkinMesh->m_destpoint=m_mouseCross;
m_pGame_SkinMesh->m_MouseMove=true;
m_bMousShow=true;
}
//D3DXVECTOR3 vMin,vMax;
//vMin=m_pGame_SkinMesh->m_vMin;
//vMax=m_pGame_SkinMesh->m_vMax;
//BookSeller->m_pMesh->GetBoundingBox(&vMin,&vMax);
for(vector<Game_EnemyNpc*>::iterator i=g_sGlobal.g_pGameApp->m_Game_EnemyNpc.begin();
i!=g_sGlobal.g_pGameApp->m_Game_EnemyNpc.end();
i++){
Pick_Game_EnemyNpc(pt,(*i));
}
//Pick_Game_QuietMesh(pt,BookSeller);
}
}
m_pGame_SkinMesh->Turn(dSide);
m_pGame_SkinMesh->WalkFoward(dForward,m_pGame_Terrain);
for(vector<Game_QuietMesh*>::iterator i=g_sGlobal.g_pGameApp->m_Game_QuietMesh.begin();
i!=g_sGlobal.g_pGameApp->m_Game_QuietMesh.end();
i++){
if (CollisionTestAABB((*i))){
m_pGame_SkinMesh->Back();
m_pGame_SkinMesh->m_MouseMove=false;
run=true;
//if(BookSeller->m_pMesh->m_bThings){
// for(int i=0;i<5;i++){
// Shop[i]->m_pInterface->m_bShow=true;
// }
// for(int i=0;i<6;i++){
// Bag[i]->m_pInterface->m_bShow=true;
// }
// BookSeller->m_pMesh->m_bThings=false;
//}
}
}
//for(vector<Game_EnemyNpc*>::iterator i=g_sGlobal.g_pGameApp->m_Game_EnemyNpc.begin();
// i!=g_sGlobal.g_pGameApp->m_Game_EnemyNpc.end();
// i++){
// m_pGame_SkinMesh->Back();
// m_pGame_SkinMesh->m_MouseMove=false;
//}
g_sGlobal.g_pGameApp->m_pGame_Camera->SetLookAt(&(*m_pGame_SkinMesh->GetPosition()+D3DXVECTOR3(0,40,0)));
return S_OK;
}
//碰撞不带骨骼MESH
LRESULT Game_Hero::CollisionTestAABB(Game_QuietMesh * pGame_QuietMesh){
D3DXVECTOR3 A1,A2;
D3DXVECTOR3 B1,B2;
m_pGame_SkinMesh->GetBoundingBox(&A1,&A2);
pGame_QuietMesh->m_pMesh->GetBoundingBox(&B1,&B2);
return (A1.x<B2.x && A2.x>B1.x
&& A1.y<B2.y && A2.y>B1.y
&& A1.z<B2.z && A2.z>B1.z);
}
//碰撞不带骨骼MESH
LRESULT Game_Hero::CollisionTestAABB(Game_EnemyNpc * pGame_EnemyNpc){
D3DXVECTOR3 A1,A2;
D3DXVECTOR3 B1,B2;
m_pGame_SkinMesh->GetBoundingBox(&A1,&A2);
pGame_EnemyNpc->m_pGame_SkinMesh->GetBoundingBox(&B1,&B2);
return (A1.x<B2.x && A2.x>B1.x
&& A1.y<B2.y && A2.y>B1.y
&& A1.z<B2.z && A2.z>B1.z);
}
BOOL Game_Hero::Pick_Game_Terrain(POINT p){
RECT rc;
int iWidth,iHeight;
GetClientRect(g_sGlobal.g_hwnd,&rc);
iWidth = rc.right - rc.left;
iHeight = rc.bottom - rc.top;
D3DXMATRIX matWorld, matView, pmatProj, m;
D3DXVECTOR3 vPickRayOrig, vPickRayDir;
D3DXVECTOR3 vPickDir,vPickOrig;
//获取当前设备的变换矩阵
g_sGlobal.g_pDevice->GetTransform( D3DTS_WORLD, &matWorld );
g_sGlobal.g_pDevice->GetTransform( D3DTS_VIEW, &matView );
g_sGlobal.g_pDevice->GetTransform( D3DTS_PROJECTION, &pmatProj );
//D3DXMatrixIdentity(&matWorld);
//计算世界观察矩阵的逆矩阵
D3DXMATRIX mWorldView =( m_pGame_Terrain->m_matWorld) * matView;
//D3DXMATRIX mWorldView =(*g_sGlobal.g_pGameApp->m_pGame_Camera->GetViewMatrix()) * matView;
D3DXMatrixInverse(&m,NULL,&mWorldView);
//计算拾取射线的方向与原点
//方向,x(-1,1),y(-1,1),z(0,1)
D3DXVECTOR3 vTemp;
vTemp.x = ((( 2.0f * p.x ) / iWidth ) - 1 ) / pmatProj._11;
vTemp.y = -((( 2.0f * p.y ) / iHeight ) - 1 ) / pmatProj._22;
vTemp.z = 1.0f;
vPickRayDir.x = vTemp.x*m._11 + vTemp.y*m._21 + vTemp.z*m._31;
vPickRayDir.y = vTemp.x*m._12 + vTemp.y*m._22 + vTemp.z*m._32;
vPickRayDir.z = vTemp.x*m._13 + vTemp.y*m._23 + vTemp.z*m._33;
vPickDir = vPickRayDir;
//射线原点
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43;
vPickOrig = vPickRayOrig;
DWORD indexFace;
FLOAT u,v;
BOOL hit;
D3DXIntersect(m_pGame_Terrain->m_pMesh,&vPickRayOrig,&vPickRayDir,&hit,&indexFace,&u,&v,NULL,NULL,NULL);
m_indexFace=indexFace;
m_u=u;
m_v=v;
return hit;
}
BOOL Game_Hero::Pick_Game_QuietMesh(POINT p,Game_QuietMesh*pGame_QuietMesh){
RECT rc;
int iWidth,iHeight;
GetClientRect(g_sGlobal.g_hwnd,&rc);
iWidth = rc.right - rc.left;
iHeight = rc.bottom - rc.top;
D3DXMATRIX matWorld, matView, pmatProj, m;
D3DXVECTOR3 vPickRayOrig, vPickRayDir;
D3DXVECTOR3 vPickDir,vPickOrig;
//获取当前设备的变换矩阵
g_sGlobal.g_pDevice->GetTransform( D3DTS_WORLD, &matWorld );
g_sGlobal.g_pDevice->GetTransform( D3DTS_VIEW, &matView );
g_sGlobal.g_pDevice->GetTransform( D3DTS_PROJECTION, &pmatProj );
//D3DXMatrixIdentity(&matWorld);
//计算世界观察矩阵的逆矩阵
D3DXMATRIX mWorldView =( pGame_QuietMesh->m_pMesh->m_matWorld) * matView;
//D3DXMATRIX mWorldView =(*g_sGlobal.g_pGameApp->m_pGame_Camera->GetViewMatrix()) * matView;
D3DXMatrixInverse(&m,NULL,&mWorldView);
//计算拾取射线的方向与原点
//方向,x(-1,1),y(-1,1),z(0,1)
D3DXVECTOR3 vTemp;
vTemp.x = ((( 2.0f * p.x ) / iWidth ) - 1 ) / pmatProj._11;
vTemp.y = -((( 2.0f * p.y ) / iHeight ) - 1 ) / pmatProj._22;
vTemp.z = 1.0f;
vPickRayDir.x = vTemp.x*m._11 + vTemp.y*m._21 + vTemp.z*m._31;
vPickRayDir.y = vTemp.x*m._12 + vTemp.y*m._22 + vTemp.z*m._32;
vPickRayDir.z = vTemp.x*m._13 + vTemp.y*m._23 + vTemp.z*m._33;
vPickDir = vPickRayDir;
//射线原点
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43;
vPickOrig = vPickRayOrig;
BOOL hit;
D3DXIntersect(pGame_QuietMesh->m_pMesh->m_pMesh,&vPickRayOrig,&vPickRayDir,&hit,NULL,NULL,NULL,NULL,NULL,NULL);
if(hit){
pGame_QuietMesh->m_pMesh->m_bThings=true;
}
return hit;
}
//拾取动态网格
BOOL Game_Hero::Pick_Game_EnemyNpc(POINT p,Game_EnemyNpc*pGame_EnemyNpc){
RECT rc;
int iWidth,iHeight;
GetClientRect(g_sGlobal.g_hwnd,&rc);
iWidth = rc.right - rc.left;
iHeight = rc.bottom - rc.top;
D3DXMATRIX matWorld, matView, pmatProj, m;
D3DXVECTOR3 vPickRayOrig, vPickRayDir;
D3DXVECTOR3 vPickDir,vPickOrig;
//获取当前设备的变换矩阵
g_sGlobal.g_pDevice->GetTransform( D3DTS_WORLD, &matWorld );
g_sGlobal.g_pDevice->GetTransform( D3DTS_VIEW, &matView );
g_sGlobal.g_pDevice->GetTransform( D3DTS_PROJECTION, &pmatProj );
//D3DXMatrixIdentity(&matWorld);
//计算世界观察矩阵的逆矩阵
D3DXMATRIX mWorldView =(pGame_EnemyNpc->m_pGame_SkinMesh->m_matWorld) * matView;
//D3DXMATRIX mWorldView =(*g_sGlobal.g_pGameApp->m_pGame_Camera->GetViewMatrix()) * matView;
D3DXMatrixInverse(&m,NULL,&mWorldView);
//计算拾取射线的方向与原点
//方向,x(-1,1),y(-1,1),z(0,1)
D3DXVECTOR3 vTemp;
vTemp.x = ((( 2.0f * p.x ) / iWidth ) - 1 ) / pmatProj._11;
vTemp.y = -((( 2.0f * p.y ) / iHeight ) - 1 ) / pmatProj._22;
vTemp.z = 1.0f;
vPickRayDir.x = vTemp.x*m._11 + vTemp.y*m._21 + vTemp.z*m._31;
vPickRayDir.y = vTemp.x*m._12 + vTemp.y*m._22 + vTemp.z*m._32;
vPickRayDir.z = vTemp.x*m._13 + vTemp.y*m._23 + vTemp.z*m._33;
vPickDir = vPickRayDir;
//射线原点
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43;
vPickOrig = vPickRayOrig;
BOOL hit;
D3DXIntersect(pGame_EnemyNpc->m_pGame_SkinMesh->m_pAABBMesh,&vPickRayOrig,&vPickRayDir,&hit,NULL,NULL,NULL,NULL,NULL,NULL);
if(hit){
//D3DXVECTOR3 vMin,vMax;
//vMin=pGame_EnemyNpc->m_pGame_SkinMesh->m_vMin;
//vMax=pGame_EnemyNpc->m_pGame_SkinMesh->m_vMax;
//pGame_EnemyNpc->m_pGame_SkinMesh->GetBoundingBox(&vMin,&vMax);
//m_mouseCross.y=pGame_EnemyNpc->m_pGame_SkinMesh->m_vMax.y;
m_mouseCross.x=pGame_EnemyNpc->m_pGame_SkinMesh->m_vPos.x;
m_mouseCross.z=pGame_EnemyNpc->m_pGame_SkinMesh->m_vPos.z;
}
return hit;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -