spritemanager.cpp

来自「Visual C++ 游戏开发与设计实例 源代码(所有)」· C++ 代码 · 共 88 行

CPP
88
字号
// 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;
	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)
{
	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 + =
减小字号Ctrl + -
显示快捷键?