📄 spritemanager.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 + -