SceneManager, Scene

김태훈·2024년 1월 8일
0

Win32API

목록 보기
9/24
post-custom-banner

Scene manager

변수 셋팅

CScene manager는 모든 씬들의 주소를 들고 있어야 한다.
enum class의 개수만큼 CScene 백터 데이터 개수를 초기화 하여 만들었다.

또한 현재씬을 알고 있어야 함

enum class SCENE_TYPE
{
TOOL,
START,
STAGE_01,
STAGE_02,
STAGE_03,

ENG,

};

class CSceneMgr
{
SINGLE(CSceneMgr);

private:

CScene* m_arrScene[(UINT)SCENE_TYPE::ENG];//모든 씬 목록
CScene* m_pCurScene;                      //현재 씬 .

}

소멸자


CSceneMgr::~CSceneMgr()
{
	//씬 전부삭제
	for (UINT i = 0; i < (UINT)SCENE_TYPE::ENG; ++i)
	{
		if (nullptr != m_arrScene[i])
		{
			delete[] m_arrScene[i];
		}

	}

}

update,render

현재 scene을 update,render

scene class

만들어질 모든 CScene의 기반이 되는 부모 클래스
각 씬은 모든 오브젝트를 관리 하기 때문에 obj vector를 변수로 갖는다

소멸자

CScene maganer에서 CScene*로 씬들을 갖고 있고 각각의 소멸자를 호출하기 때문에
소멸자를 virtual로 해야지 파생된 클래스의 소멸자가 호출된다!!!(꼭 기억하기)
virtual을 하지 않으면 실객체의 함수가 아닌 포인터가 가르키는 곳에서의 함수만 호출 된다!!
만들어질 모든 object의 기반이 되는 object class에서도 마찬가지이다!

CScene::~CScene()
{
for (UINT i = 0; i < (UINT)GROUP_TYPE::END; ++i)
{
for (size_t j = 0; j < m_arrObj[i].size(); ++j)
{
//i번째 그룹의 j번째 물체 삭제
delete m_arrObj[i][j];
}
delete &m_arrObj[i];
}

}

enter,exit

scene이 처음 시작할때 enter
다른 scene으로 전환 되야 할때 exit(제거가 필요한 object를 다 지워줘야 함)
이 둘 함수는 기반이면서 부모 class인 CScene은 구현할 필요 없기 때문에
순수 가상함수 사용, 추상 클래스

update,render

scene이 갖고있는 각 object 그룹의 object주소를 update,render


void CScene::render(HDC _dc)
{
	for (UINT i = 0; i < (UINT)GROUP_TYPE::END; ++i)
	{
		for (size_t j = 0; j < m_arrObj[i].size(); ++j)
		{
			m_arrObj[i][j]->render(_dc);
			
		}
	}
}
void CScene::update()
{	if(m_fSceneSetTime<1500)
		m_fSceneSetTime = CTimeMgr::GetInst()->GetRunningTime();

	for (UINT i = 0; i < (UINT)GROUP_TYPE::END; ++i)
	{
		for (size_t j = 0; j < m_arrObj[i].size(); ++j)
		{
			if (!(m_arrObj[i][j]->IsDead()))
			m_arrObj[i][j]->update();
			
		}
		
	}

}
profile
복습을 위한 핵심 내용 및 모작
post-custom-banner

0개의 댓글