📄 gamebufferpage.cpp
字号:
#include "StdAfx.h"
#include ".\gamebufferpage.h"
CGameBufferPage::CGameBufferPage(void)
{
m_hgeSprite = NULL;
m_hTarget = NULL;
m_hPreTarget= NULL;
m_bManual = false;
m_bChanged = false;
}
CGameBufferPage::~CGameBufferPage(void)
{
////释放控制的对象
//IGameObject* pIGameObject = m_lstGameObjects.Iterators(true);
//while(pIGameObject){
// pIGameObject->Release();
// pIGameObject = m_lstGameObjects.Iterators();
//}
if(m_hgeSprite)
SafeDelete(m_hgeSprite);
}
//添加元素
bool CGameBufferPage::Add(IGameObject* pIGameObject, _CString szName, INT_PTR nPosition){
if(nPosition==LISTTEMPLATE_LAST_ITEM)
m_lstGameObjects.Push(pIGameObject, szName);
else
m_lstGameObjects.Insert(pIGameObject, nPosition, szName);
return true;
}
//移除元素
bool CGameBufferPage::Remove(INT_PTR nIndex){
m_lstGameObjects.Remove(nIndex);
return true;
}
//移除元素
bool CGameBufferPage::RemoveBy(_CString szKey){
m_lstGameObjects.RemoveBy(szKey);
return true;
}
//对象创建
bool CGameBufferPage::Create(LPCTSTR lpName, _SIZE siSize, bool bManual){
__super::Create(lpName, siSize, Type_BufferPage);
m_bManual = bManual;
m_hgeSprite = new hgeSprite(NULL, 0, 0, m_BasalInfo.Size.cx, m_BasalInfo.Size.cy);
return true;
}
//生成缓冲
bool CGameBufferPage::GenerateBuffer(WPARAM wParam){
_ASSERT(m_hgeSprite);
if(m_hTarget){
m_hPreTarget = m_hTarget;
}
LPGDI lpGDI = g_lpDefaultResource->GetGDI();
m_hTarget = lpGDI->Target_Create((int)m_BasalInfo.Size.cx, (int)m_BasalInfo.Size.cy, false);
lpGDI->Gfx_BeginScene(m_hTarget);
lpGDI->Gfx_Clear(0);
//渲染对象
IGameObject* pIGameObject = m_lstGameObjects.Iterators(true);
while(pIGameObject){
pIGameObject->Render(wParam);
pIGameObject = m_lstGameObjects.Iterators();
}
lpGDI->Gfx_EndScene();
lpGDI->Texture_Free(m_hgeSprite->GetTexture());
m_hgeSprite->SetTexture(lpGDI->Target_GetTexture(m_hTarget));
m_hgeSprite->SetTextureRect(0,0,m_BasalInfo.Size.cx, m_BasalInfo.Size.cy, false);
if(m_hPreTarget){
lpGDI->Target_Free(m_hPreTarget);
m_hPreTarget = NULL;
}
return true;
}
//预渲染对象
void CGameBufferPage::PreRender(WPARAM wParam){
_ASSERT(m_hgeSprite);
if(!m_bManual && m_bChanged){
GenerateBuffer(wParam);
}
}
//渲染场景
void CGameBufferPage::Render(WPARAM wParam){
if(m_hgeSprite)
m_hgeSprite->RenderEx((float)m_BasalInfo.ScreenPos.x+m_BasalInfo.AnchorPos.x, (float)m_BasalInfo.ScreenPos.y+m_BasalInfo.AnchorPos.y, (float)m_GameBasalInfo.Angle, (float)m_GameBasalInfo.Scaling.cx, (float)m_GameBasalInfo.Scaling.cy);
}
//接口查询
void * CGameBufferPage::QueryInterface(const IID & Guid, DWORD dwQueryVer){
QUERYINTERFACE(IGameObject,Guid,dwQueryVer);
QUERYINTERFACE(IBaseObject,Guid,dwQueryVer);
QUERYINTERFACE_IUNKNOWNEX(IGameObject,Guid,dwQueryVer);
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -