- Scene 과 SceneManager 설계.
#pragma once
// forward declare
class CObject;
class CScene
{
private:
vector<CObject*> m_arrObj[(UINT)GROUP_TYPE::END];
wstring m_strName;
public:
void SetName(const wstring& name) { m_strName = name; }
const wstring& GetName() const { return m_strName; }
public:
CScene();
virtual ~CScene();
};
구조만 잡아놓음.
virtual 소멸자는 상속을 통해 다형성을 구현할 Base 클래스에 반드시 선언해줘야 함.
#pragma once
class CScene;
class CSceneMgr
{
SINGLETON(CSceneMgr);
private:
CScene* m_arrScene[(UINT)SCENE_TYPE::END];
CScene* m_pCurScene;
public:
void init();
};
Scene 을 관리할 관리자 클래스도 마찬가지로 싱글톤으로 선언.
근데 씬 관리를 왜 벡터로 안하고 단순 배열로 하는지 모르겠음. 강의를 좀더 봐야겠다.
- CCore 구조 수정
void CCore::progress()
{
// Manager Update
CTimeMgr::GetInstance()->update();
CKeyMgr::GetInstance()->update();
CSceneMgr::GetInstance()->update();
// update();
render();
}
void CCore::render()
{
// 이전 화면 지우기
Rectangle(m_hDCBack, -1, -1, m_ptResolution.x + 1, m_ptResolution.y + 1);
//
CSceneMgr::GetInstance()->render(m_hDCBack);
BitBlt(m_hDC,
0, 0, m_ptResolution.x, m_ptResolution.y,
m_hDCBack,
0, 0,
SRCCOPY);
}
CCore 는 본격적으로 관리자 객체들에게 일을 떠넘긴다. update 나 render 를 하위 객체들에게 넘김.
- Scene 추상 클래스화.
// CScene.h
class CScene
{
...
virtual void Enter() PURE;
virtual void Exit() PURE;
protected:
inline void AddObject(CObject* obj, GROUP_TYPE eType)
{
if (obj == nullptr)
return;
m_arrObj[(UINT)eType].push_back(obj);
}
...
};
PURE 는 그냥 전처리기로 = 0 을 뜻함. 순수 가상 함수를 선언할 때 쓰면 가독성이 좋을 듯.
AddObject 메소드는 protected 로 선언해서 상속 클래스들에서 사용 가능하도록 함.
- 개략적인 프레임워크 완성
void CSceneMgr::update()
{
if (m_pCurScene == nullptr)
return;
for(UINT i = 0; i < (UINT)SCENE_TYPE::END; ++i)
{
if(m_arrScene[i] == nullptr)
continue;
if (m_arrScene[i] != m_pCurScene)
continue;
m_pCurScene->update();
}
}
void CSceneMgr::render(HDC hDC)
{
if (m_pCurScene == nullptr)
return;
for (UINT i = 0; i < (UINT)SCENE_TYPE::END; ++i)
{
if (m_arrScene[i] == nullptr)
continue;
if (m_arrScene[i] != m_pCurScene)
continue;
m_pCurScene->render(hDC);
}
}
SceneManager → Scene → Object 순으로 호출되며 매 프레임마다 매 씬들의 모든 오브젝트들의
update 와 render 가 돌아가게 됨.
'Win32 api' 카테고리의 다른 글
| Win32 api 강의 21 - 22화. (0) | 2025.09.16 |
|---|---|
| Win32 api 강의 17 - 18화. (0) | 2025.09.15 |
| Win32 api 강의 13 - 14화. (0) | 2025.09.14 |
| Win32 api 강의 12화. (0) | 2025.09.13 |
| Win32 api 강의 11화. (0) | 2025.09.13 |