📄 game_cursor.cpp
字号:
#include "Game_User.h"
CCursor::CCursor(LPDIRECT3DDEVICE9 pDevice)
{
m_pd3dDevice = pDevice;
m_wWidth = 32;
m_wHeight = 32;
m_pPointerTex = NULL;
m_wState = CURSOR_NORMAL;
m_isShow = true;
// 计算屏幕宽度,高度
D3DSURFACE_DESC m_d3dsdBackBuffer;
LPDIRECT3DSURFACE9 pBackBuffer = NULL;
m_pd3dDevice->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer );
pBackBuffer->GetDesc( &m_d3dsdBackBuffer );
m_wScreenWidth=m_d3dsdBackBuffer.Width;
m_wScreenHeight=m_d3dsdBackBuffer.Height;
m_pd3dDevice->CreateVertexBuffer(4 * sizeof(PANEL_CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT, &m_pVertexBuffer,NULL);
UpdateVertices();
}
CCursor::~CCursor()
{
}
HRESULT CCursor::SetPosition(POINT p)
{
//移动二维窗口的位置
D3DXMATRIX matMove;
m_Pos.x=p.x;
m_Pos.y=p.y;
//鼠标相对屏幕中心点坐标
p.x -= (m_wScreenWidth / 2) - (m_wWidth / 2);
p.y -= (m_wScreenHeight / 2)- (m_wHeight / 2);
D3DXMatrixTranslation(&matMove, (float)p.x, -(float)p.y, 0.0f);
m_pd3dDevice->SetTransform(D3DTS_WORLD, &matMove);
return S_OK;
}
HRESULT CCursor::UpdateVertices()
{
PANEL_CUSTOMVERTEX* pVertices = NULL;
m_pVertexBuffer->Lock(0, 4 * sizeof(PANEL_CUSTOMVERTEX), (void**)&pVertices, 0);
//设置位置
pVertices[0].x = -(m_wWidth) / 2.0f;
pVertices[0].y = -(m_wHeight) / 2.0f;
pVertices[1].x = -(m_wWidth) / 2.0f;
pVertices[1].y = m_wHeight / 2.0f;
pVertices[2].x = (m_wWidth) / 2.0f;
pVertices[2].y = -(m_wHeight) / 2.0f;
pVertices[3].x = (m_wWidth) / 2.0f;
pVertices[3].y = m_wHeight / 2.0f;
pVertices[0].z = 1.0f;
pVertices[1].z = 1.0f;
pVertices[2].z = 1.0f;
pVertices[3].z = 1.0f;
//设置纹理坐标
pVertices[0].u = 0.0f;
pVertices[0].v = 1.0f;
pVertices[1].u = 0.0f;
pVertices[1].v = 0.0f;
pVertices[2].u = 1.0f;
pVertices[2].v = 1.0f;
pVertices[3].u = 1.0f;
pVertices[3].v = 0.0f;
m_pVertexBuffer->Unlock();
return S_OK;
}
HRESULT CCursor::Render()
{
if (!m_isShow) return S_OK;
switch(m_wState)
{
case CURSOR_NORMAL:
SetCursorTex(CURSOR_TEX_NORMAL);
break;
case CURSOR_STOP:
SetCursorTex(CURSOR_TEX_STOP);
break;
case CURSOR_ATTACK:
SetCursorTex(CURSOR_TEX_ATTACK);
break;
case CURSOR_SPEAK:
SetCursorTex(CURSOR_TEX_SPEAK);
break;
}
m_pd3dDevice->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(PANEL_CUSTOMVERTEX));
m_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
if(m_pPointerTex != NULL)
{
m_pd3dDevice->SetTexture(0, m_pPointerTex);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
}
else
{
m_pd3dDevice->SetTexture(0, NULL);
}
m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
return S_OK;
}
HRESULT CCursor::SetCursorTex(char* path)
{
SAFE_RELEASE(m_pPointerTex);
if (FAILED(D3DXCreateTextureFromFile( m_pd3dDevice, path, &m_pPointerTex )))
{
MessageBox(NULL,"加载鼠标指针图片失败","错误",MB_OK);
return E_FAIL;
}
return S_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -