- 씬 변경 기능 구현.
// func.cpp
...
void ChangeScene(SCENE_TYPE eType)
{
tEvent event = {};
event.eType = EVENT_TYPE::SCENE_CHANGE;
event.lParam = (DWORD_PTR)eType;
event.wParam = 0;
CEventMgr::GetInstance()->AddEvent(event);
}
범용 함수로 ChangeScene 을 만듦. 인자로는 변경할 SCENE_TYPE 을 받아서 이벤트 처리해줌.
// CEventMgr.cpp
void CEventMgr::Execute(const tEvent& event)
{
switch (event.eType)
{
...
case EVENT_TYPE::SCENE_CHANGE:
{
// lParam: 새 씬의 SCENE_TYPE
SCENE_TYPE eType = (SCENE_TYPE)event.lParam;
CSceneMgr::GetInstance()->ChangeScene(eType);
}
break;
default:
break;
}
}
이벤트 매니저는 해당 타입을 받아서 Scene Manager 에게 넘겨줌. 그럼 안전하게 모든 update, late_update, render 함수들이 호출된 후 씬을 변경할 수 있다.
// CSceneMgr.cpp
...
void CSceneMgr::ChangeScene(SCENE_TYPE eType)
{
if (m_pCurScene != nullptr)
{
m_pCurScene->Exit();
}
CScene* pNewScene = m_arrScene[(UINT)eType];
if (pNewScene == nullptr)
return;
m_pCurScene = pNewScene;
m_pCurScene->Enter();
}
이전 씬의 Exit 처리해주고, 새로운 씬으로 변경 후 Enter 를 호출.
// CScene_Start.cpp
...
void CScene_Start::update()
{
CScene::update();
if(KEYTAPCHECK(KEY::ENTER))
{
ChangeScene(SCENE_TYPE::TOOL);
}
}
각종 씬에서 입력이 들어오면 범용 함수 ChangeScene 을 호출하면 씬 변경이 완료된다.
- 씬 변경시 오브젝트 비우기.
// CScene.cpp
...
void CScene::ClearAllObjects()
{
for (UINT i = 0; i < (UINT)GROUP_TYPE::END; ++i)
{
ClearGroupObjects((GROUP_TYPE)i);
}
}
void CScene::ClearGroupObjects(GROUP_TYPE eType)
{
SafeDeleteVector(m_arrObj[(UINT)eType]);
}
Scene 클래스에서 각 group 마다 오브젝트들을 지우는 함수들을 만들어줌.
SafeDeleteVector 함수는 func.h 에 선언한 범용 템플릿 함수이며
// func.h
template <typename T>
void SafeDeleteVector(vector<T>& vec)
{
for (T& item : vec)
{
if (item == nullptr)
continue;
delete item;
item = nullptr;
}
vec.clear();
}
그냥 인자로 받은 벡터의 원소들을 안전하게 delete 하는 코드를 자주 쓰기 위해 만든 것.
// CScene_Start.cpp
...
void CScene_Start::Exit()
{
CCollisionMgr::GetInstance()->Reset();
ClearAllObjects();
}
각 씬마다 Exit 함수에서 clear 시키면 씬을 바꿀 때마다 오브젝트를 없애고 넘어갈 수 있다.
'Win32 api' 카테고리의 다른 글
| Win32 api 강의 37 - 38화. (0) | 2025.09.22 |
|---|---|
| Win32 api 강의 35 - 36화. (0) | 2025.09.21 |
| Win32 api 강의 31 - 33화. (0) | 2025.09.19 |
| Win32 api 강의 29 - 30화. (0) | 2025.09.18 |
| Win32 api 강의 27 - 28화. (0) | 2025.09.18 |