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

📄 spritemanager.cpp

📁 这是一个屠宰场游戏,此游戏很休闲的请大家下载来看看.
💻 CPP
字号:
// SpriteManager.cpp: implementation of the CSpriteManager class.
//
//////////////////////////////////////////////////////////////////////
#include <list>
#include "DSUtil.h"
#include "ddutil.h"
#include "Sprite.h"
#include "SpriteManager.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSpriteManager::CSpriteManager()
{

}

CSpriteManager::~CSpriteManager()
{

}

void CSpriteManager::Update()
{
	std::list<CSprite*>::iterator iSprite; //迭代器 (iterators)。它是指针的概括
	for ( iSprite = m_pSpriteList.begin(); iSprite != m_pSpriteList.end(); iSprite++)//遍历列表中的所有精灵
		(*iSprite)->Update();//更新精灵
}

void CSpriteManager::AddSprite(CSprite *pSprite)
{
	pSprite->m_Movement.m_pfnCollision = m_pfnCollision; //给函数指针赋值,指明函数
	pSprite->m_Movement.m_pfnFindPath  = m_pfnFindPath;
	m_pSpriteList.push_front(pSprite);  //在队列前面插入
}

void CSpriteManager::Draw(LPDIRECTDRAWSURFACE7 pdds) //画出所有精灵
{
	std::list<CSprite*>::iterator iSprite;
	for ( iSprite = m_pSpriteList.begin(); iSprite != m_pSpriteList.end(); iSprite++)
		(*iSprite)->Draw(pdds);
}

void CSpriteManager::RemoveSprite(CSprite *pSprite) //删除精灵
{
	m_pSpriteList.remove(pSprite);
}

void CSpriteManager::SetCollAndPathFn(bool (__cdecl *pfnCollision)(RECT&), void (__cdecl *pfnFindPath)(CSprite *))
{   //设置函数
	m_pfnCollision = pfnCollision;//函数指针赋值
	m_pfnFindPath = pfnFindPath;
}

bool CSpriteManager::IsHit(RECT &rc) //碰撞,用于检测敌人杀死玩家
{
	std::list<CSprite*>::iterator iSprite;
	for ( iSprite = m_pSpriteList.begin(); iSprite != m_pSpriteList.end(); iSprite++) {
		if ((*iSprite)->m_Movement.m_nInvulnerable==0 && (*iSprite)->IsHit(rc) == true) {
			return true;
		}
	}
	return false;
}

int CSpriteManager::KillSpritesColliWith(CSprite* pSprite)//如果某精灵和pSprite 碰撞,则死亡
{ //本函数用于处理判断敌人是否与粪便碰撞
	std::list<CSprite*>::iterator iSprite;
	int nHit = 0;
	for ( iSprite = m_pSpriteList.begin(); iSprite != m_pSpriteList.end(); iSprite++) {
		if (pSprite->IsHit((*iSprite)->GetRect()) == true) {
			long nState = (*iSprite)->GetState();
			if (nState != ST_DEAD && nState !=ST_KILL) {
				(*iSprite)->SetState(ST_KILL);
				nHit++;
			}
		}
		
	}
	return nHit;
}

void CSpriteManager::Destroy()
{
	m_pSpriteList.erase(m_pSpriteList.begin(),m_pSpriteList.end());
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -