📄 d3dsprite.cpp
字号:
#include "D3DSprite.h"
CD3DSprite::CD3DSprite(LPDIRECT3DDEVICE9 pd3dDevice)
{
m_pd3dDevice = NULL;
m_pTexture = NULL;
m_pSprite = NULL;
if(pd3dDevice==NULL)
return ;
m_pd3dDevice = pd3dDevice;
//创建我们的 纹理 精灵
if(!SUCCEEDED(D3DXCreateSprite(m_pd3dDevice,&m_pSprite)))
return ;
//设定 我们 加载 图片的 区域
m_Rect.top=0;
m_Rect.left=0;
m_Rect.bottom=20;
m_Rect.right=20;
//设定 我们加载图片的 中心 点
m_Center.x=0;
m_Center.y=0;
m_Center.z=0;
//渲染得 位子
m_Posion.x=0;
m_Posion.y=0;
m_Posion.z=0;
//图片的 的 等级颜色
m_Alpha=0xffffffff;
m_fAngle=1.0f;
m_bShiYongEvent = false;
m_bIn = false;
}
CD3DSprite::~CD3DSprite()
{
}
void CD3DSprite::Inint(const char* adds /* = */)
{
if(m_pd3dDevice==NULL || m_pSprite == NULL || adds == NULL)
return;
D3DXCreateTextureFromFileEx(
m_pd3dDevice,
adds,
D3DX_FROM_FILE,D3DX_FROM_FILE,
D3DX_FROM_FILE,0,
D3DFMT_A8R8G8B8,
D3DPOOL_MANAGED,
D3DX_DEFAULT,D3DX_DEFAULT,
0xffff00ff,NULL,NULL,&m_pTexture);
}
void CD3DSprite::SetSprite(float iPosx,float iPosy,float iWidth,float iHeight)
{
m_Rect.left=(long)iPosx;
m_Rect.top=(long)iPosy;
m_Rect.right=(long)(iPosx+iWidth);
m_Rect.bottom=(long)(iPosy+iHeight);
}
void CD3DSprite::SetDrawPos(float iPosx,float iPosy,float iPosz)
{
m_Posion.x=iPosx;
m_Posion.y=iPosy;
m_Posion.z=iPosz;
}
void CD3DSprite::SetCenterPoint(float iCx,float iCy,float iCz/* =0.0f */)
{
m_Center.x=iCx;
m_Center.y=iCy;
m_Center.z=iCz;
}
void CD3DSprite::SetAphaStep(int nLevel)
{
if (nLevel>255)
{
nLevel=255;
}
if (nLevel<0)
{
nLevel=0;
}
m_Alpha=D3DCOLOR_RGBA(nLevel,nLevel,nLevel,nLevel);
}
void CD3DSprite::AddAphaStep(int nLevel)
{
if(nLevel<0)
nLevel=0;
if(nLevel>=255)
nLevel=255;
m_Alpha=(nLevel&0xff)<<24 | (nLevel&0xff)<<16 | (nLevel&0xff)<<8 | (nLevel&0xff);
}
int CD3DSprite::MomveType(int Pointx,int Pointy)
{
if(m_bShiYongEvent)
{
if(IsPointIn(Pointx,Pointy))
{
if(!m_bIn)
{
m_bIn = true;
return 1;
}
else
{
//if(CGameTool::GetGameTool()->GetGameDInput()->GetIsKeyDown(MK_LEFT))
// if()
//return 4;
return 0;
}
}
else
{
if(m_bIn)
{
m_bIn= false;
return 2;
}
else
{
return 3;
}
}
//后加的
return 5;
}
//后加的
return 5;
}
bool CD3DSprite::IsPointIn(int Pointx,int Pointy)
{
float Topx=(float)m_Posion.x;
float Topy=(float)m_Posion.y;
float Bottonx=(float)m_Posion.x+(m_Rect.right-m_Rect.left);
float Bottony=(float)m_Posion.y+(m_Rect.bottom-m_Rect.top);
if(Pointx>Topx && Pointx<Bottonx && Pointy>Topy && Pointy<Bottony)
return true;
else
return false;
}
void CD3DSprite::DoFrame()
{
//这里 以后 可能 对 图片的 旋转 有编程
D3DXMATRIX matWorld,matWordR,matWordT,matWordS;
D3DXMatrixIdentity(&matWorld);
D3DXMatrixRotationZ( &matWordR,m_fAngle);
D3DXMatrixMultiply(&matWorld,&matWorld,&matWordR);
//D3DXMatrixScaling(&matWordS,m_ScalX,m_ScalY,1.0f);
//D3DXMatrixMultiply(&matWorld,&matWorld,&matWordS);
D3DXMatrixTranslation(&matWordT,m_Posion.x,m_Posion.y,0);
D3DXMatrixMultiply(&matWorld,&matWorld,&matWordT);
m_pSprite->SetTransform(&matWorld);
}
void CD3DSprite::Render(bool jiantou)
{
m_pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);
m_pd3dDevice->SetRenderState(D3DRS_ALPHAREF, 0x04);
m_pd3dDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
if(jiantou==true)
{
DoFrame();
m_pSprite->Begin(NULL);
m_pSprite->Draw(m_pTexture,&m_Rect,&m_Center,NULL,m_Alpha);
m_pSprite->End();
m_pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);
}
else
{
m_pSprite->Begin(NULL);
m_pSprite->Draw(m_pTexture,&m_Rect,&m_Center,&m_Posion,m_Alpha);
m_pSprite->End();
m_pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);
}
}
void CD3DSprite::Clean()
{
}
void CD3DSprite::SetAngle(float fAngle)
{
m_fAngle=fAngle;
}
LPDIRECT3DTEXTURE9 CD3DSprite::GetTexture()
{
return m_pTexture;
}
RECT CD3DSprite::GetRect()
{
return m_Rect;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -