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

📄 gamebufferpage.cpp

📁 游戏框架
💻 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 + -