⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 game_cursor.cpp

📁 我做的毕业设计
💻 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 + -