www.pudn.com > 3DRPG.rar > Panel.cpp


#include "stdafx.h" 
#include "Panel.h" 
#include "Game.h" 
 
CPanel::CPanel(LPDIRECT3DDEVICE9 d3dd,int nWidth,int nHeight,int nScreenWidth,int nScreenHeight) 
{ 
	m_pD3DDevice=d3dd; 
	m_pBuffer=NULL; 
	m_pTexture=NULL; 
	m_nWidth=nWidth; 
	m_nHeight=nHeight; 
	m_nScreenWidth=nScreenWidth; 
	m_nScreenHeight=nScreenHeight; 
	m_Rect.left=0.0f; 
	m_Rect.top=0.0f; 
    NIcon=3; 
	IconVer=NIcon*4; 
    TxOfIcon=NIcon*2; 
 
	NumOfPos=new POSS[NIcon]; 
	RECT rect0;rect0.left=250; rect0.top=350; rect0.right=300; rect0.bottom=100;//退出面板 
	RECT rect1={rect0.left+10,rect0.top-60,63,26,};//“是”按钮 
	RECT rect2={rect0.left+227,rect0.top-60,63,26,};//“否”按钮 
	//RECT rect1;rect1.left=0; rect1.top=0; rect1.right=63; rect1.bottom=26; 
	RECT rect3={0.0f,100.0f,800.0f,100.0f}; 
	RolePanel=Calculate(rect3); 
	NumOfPos[0]=Calculate(rect0); 
    NumOfPos[1]=Calculate(rect1); 
	NumOfPos[2]=Calculate(rect2); 
 
	m_ArrayOfTx=new LPDIRECT3DTEXTURE9[TxOfIcon]; 
    Result=new bool[NIcon]; 
	ButtonPress=new bool[NIcon];//false表示没被按下,true表示已按下 
	CallPress=new bool[NIcon];//false表示按钮没被调用,true表示被调用 
	for(int i=0;iRelease(); 
	m_pTexture->Release(); 
	m_pTexture_1->Release(); 
    m_pIconBuffer->Release(); 
	for(int i=0;iRelease(); 
	} 
	DeleteObject(m_ArrayOfTx); 
} 
 
void CPanel::SetVertexBuffer() 
{ 
	m_pD3DDevice->CreateVertexBuffer(8*sizeof(VERTEX),0,PANEL_D3DFVF_VERTEXBUFFER,D3DPOOL_DEFAULT,&m_pBuffer,NULL); 
	m_pD3DDevice->CreateVertexBuffer(IconVer*sizeof(VERTEX),0,PANEL_D3DFVF_VERTEXBUFFER,D3DPOOL_DEFAULT,&m_pIconBuffer,NULL); 
} 
 
void CPanel::UpdateVertex() 
{ 
	VERTEX * pVertex; 
	m_pBuffer->Lock(0,8*sizeof(VERTEX),(void **)&pVertex,0); 
	 
	pVertex[0].x=300; 
	pVertex[0].y=580; 
	pVertex[0].z=0.0f; 
	 
	pVertex[1].x=500; 
	pVertex[1].y=580; 
	pVertex[1].z=0.0f; 
 
	pVertex[2].x=300; 
	pVertex[2].y=520; 
	pVertex[2].z=0.0f; 
 
    pVertex[3].x=500; 
	pVertex[3].y=520; 
	pVertex[3].z=0.0f; 
 
	pVertex[4].x=RolePanel.ltx; 
	pVertex[4].y=RolePanel.lty; 
	pVertex[4].z=0.0f; 
	 
	pVertex[5].x=RolePanel.rtx; 
	pVertex[5].y=RolePanel.rty; 
	pVertex[5].z=0.0f; 
	 
	pVertex[6].x=RolePanel.lbx; 
	pVertex[6].y=RolePanel.lby; 
	pVertex[6].z=0.0f; 
 
	pVertex[7].x=RolePanel.rbx; 
	pVertex[7].y=RolePanel.lby; 
	pVertex[7].z=0.0f; 
 
 
	pVertex[0].tu=0.0f; 
	pVertex[0].tv=0.0f; 
 
	pVertex[1].tu=1.0f; 
	pVertex[1].tv=0.0f; 
 
	pVertex[2].tu=0.0f; 
	pVertex[2].tv=1.0f; 
 
	pVertex[3].tu=1.0f; 
	pVertex[3].tv=1.0f; 
 
	pVertex[4].tu=0.0f; 
	pVertex[4].tv=0.0f; 
           
    pVertex[5].tu=1.0f; 
	pVertex[5].tv=0.0f; 
   
	         
	pVertex[6].tu=0.0f; 
	pVertex[6].tv=1.0f; 
      
	        
	pVertex[7].tu=1.0f; 
	pVertex[7].tv=1.0f; 
      
 
	m_pBuffer->Unlock(); 
    pVertex=NULL; 
	m_pIconBuffer->Lock(0,IconVer*sizeof(VERTEX),(void **)&pVertex,0); 
		int k=0;  
		for(int i=0;iUnlock(); 
 
 
} 
 
HRESULT CPanel::SetTexture() 
{ 
	if(FAILED(D3DXCreateTextureFromFileEx(m_pD3DDevice, "./res/bar_2.tga", 0, 0, 0, 0, 
										  D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, 
										  D3DX_DEFAULT, D3DCOLOR_XRGB(0,0,0), NULL, NULL, &m_pTexture))) 
	{ 
		E_FAIL; 
	} 
    D3DXCreateTextureFromFileEx(m_pD3DDevice, "./res/bar_1.tga", 0, 0, 0, 0, 
										  D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, 
										  D3DX_DEFAULT, D3DCOLOR_XRGB(0,0,0), NULL, NULL, &m_pTexture_1); 
    D3DXCreateTextureFromFileEx(m_pD3DDevice, "./res/exit.jpg", 0, 0, 0, 0, 
										  D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, 
										  D3DX_DEFAULT, D3DCOLOR_XRGB(0,0,0), NULL, NULL, &m_ArrayOfTx[0]);//退出面板 
	D3DXCreateTextureFromFileEx(m_pD3DDevice, "./res/exit.jpg", 0, 0, 0, 0, 
										  D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, 
										  D3DX_DEFAULT, D3DCOLOR_XRGB(0,0,0), NULL, NULL, &m_ArrayOfTx[1]);//退出面板 
    D3DXCreateTextureFromFileEx(m_pD3DDevice, "./res/exit_buttonY_up.jpg", 0, 0, 0, 0, 
										  D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, 
										  D3DX_DEFAULT, D3DCOLOR_XRGB(0,0,0), NULL, NULL, &m_ArrayOfTx[2]);//退出面板,是按钮弹起 
    D3DXCreateTextureFromFileEx(m_pD3DDevice, "./res/exit_buttonY_down.jpg", 0, 0, 0, 0, 
										  D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, 
										  D3DX_DEFAULT, D3DCOLOR_XRGB(0,0,0), NULL, NULL, &m_ArrayOfTx[3]);//退出面板,是按钮按下 
    D3DXCreateTextureFromFileEx(m_pD3DDevice, "./res/exit_buttonN_up.jpg", 0, 0, 0, 0, 
										  D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, 
										  D3DX_DEFAULT, D3DCOLOR_XRGB(0,0,0), NULL, NULL, &m_ArrayOfTx[4]);//退出面板,否按钮弹起 
    D3DXCreateTextureFromFileEx(m_pD3DDevice, "./res/exit_buttonN_down.jpg", 0, 0, 0, 0, 
										  D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, 
										  D3DX_DEFAULT, D3DCOLOR_XRGB(0,0,0), NULL, NULL, &m_ArrayOfTx[5]);//退出面板,否按钮按下 
	return S_OK; 
} 
 
void CPanel::Translate(int x,int y) 
{ 
D3DXMATRIX matMove; 
 
	 
 
	D3DXMatrixTranslation(&matMove, (float)x, -(float)y, 0.0f); 
	 
	m_pD3DDevice->SetTransform(D3DTS_WORLD, &matMove); 
} 
 
void CPanel::RenderPanel() 
{ 
	 
     
	m_pD3DDevice->SetStreamSource(0,m_pIconBuffer,0,sizeof(VERTEX)); 
	m_pD3DDevice->SetFVF(PANEL_D3DFVF_VERTEXBUFFER); 
	int k=0;int j=0; 
	for(int i=0; iSetTexture(0,m_ArrayOfTx[k]); 
		//m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); 
		m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1,D3DTA_TEXTURE); 
		//m_pD3DDevice->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_DISABLE);  
 
		m_pD3DDevice->SetTexture(1,m_ArrayOfTx[k+1]);//m_ArrayOfTx[k+1] 
		//m_pD3DDevice->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_SELECTARG1); 
		m_pD3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1,D3DTA_CURRENT); 
		//m_pD3DDevice->SetTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_DISABLE);  
		} 
		else 
		{ 
 
		m_pD3DDevice->SetTexture(0,m_ArrayOfTx[k+1]);//m_ArrayOfTx[k+1] 
		//m_pD3DDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1); 
		m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1,D3DTA_TEXTURE); 
		//m_pD3DDevice->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_DISABLE);  
 
        m_pD3DDevice->SetTexture(1,m_ArrayOfTx[k]); 
		//m_pD3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_SELECTARG1); 
		m_pD3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1,D3DTA_CURRENT); 
		//m_pD3DDevice->SetTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_DISABLE);  
         
 
		} 
	     m_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,j,2); 
		} 
	k+=2; 
	j+=4; 
	} 
 
    m_pD3DDevice->SetStreamSource(0,m_pBuffer,0,sizeof(VERTEX)); 
	m_pD3DDevice->SetFVF(PANEL_D3DFVF_VERTEXBUFFER); 
	m_pD3DDevice->SetTexture(0,m_pTexture_1); 
	m_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,4,2); 
	 
} 
 
POSS CPanel::Calculate(RECT rect) 
{ 
	POSS a; 
	a.ltx=rect.left; a.lty=rect.top; a.rtx=rect.left+rect.right; a.rty=rect.top; 
	a.lbx=rect.left; a.lby=rect.top-rect.bottom; a.rbx=rect.left+rect.right; a.rby=rect.top-rect.bottom; 
	return a; 
} 
void CPanel::Render() 
{ 
    m_pD3DDevice->SetStreamSource(0,m_pBuffer,0,sizeof(VERTEX)); 
	m_pD3DDevice->SetFVF(PANEL_D3DFVF_VERTEXBUFFER); 
	m_pD3DDevice->SetTexture(0,m_pTexture); 
	//m_pD3DDevice->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE); 
	m_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2); 
}