WIN32API FrameWork/원본

220504_WIN32API_Framework_5-1_SceneManager

2022. 5. 8. 17:54

 

 

* Scene을 관리할 SceneManager 클래스를 싱글턴 패턴으로 미리 작성해놓은 매크로를 통해 선언한다. 하나의 SceneManager에서 Scene을 그때그때 바꿔 가며 실행할 것이다.

DECLARE_SINGLETON(CSceneManager)

 

 

 

* 실행되고 있는 Scene 주소를 담아놓을 포인터를 선언한다.

private:
	//씬매니저에서 씬 하나를 관리. 씬은 단 하나만 들고있을 예정.
	class CScene* m_Scene;

 

 

* 앞으로 모든 GameObject의 Update와 Render 함수 처리는 모두 SceneManager 클래스에서 시작한다.

bool CSceneManager::Init()
{
	//템플릿에 CMainScene을 넣어 CreateScene 함수를 통해 생성
	CreateScene<CMainScene>();

	return true;
}

bool CSceneManager::Update(float DeltaTime)
{
	m_Scene->Update(DeltaTime);

	//기본적으로 false를 반환해 주고,
    //update에서 씬을 바꾸는 상황이 생기면
    //true를 리턴해 줌으로써
    //update와 render을 일시 중지한다.
	return false;
}

void CSceneManager::Render(HDC hDC, float DeltaTime)
{
	m_Scene->Render(hDC, DeltaTime);
}

 

 

* CreateScene() 함수를 템플릿으로 선언하여 어떤 클래스던 생성할 수 있도록 해준다.

클래스 생성에 성공하면, 위에서 선언한 m_Scene 변수에 등록한다.

	template <typename T>
	bool CreateScene()
	{
		//씬 생성 및 초기화(실패시 False 반환)
		T* Scene = new T;
		if (!Scene->Init())
		{
			SAFE_DELETE(Scene);
			return false;
		}

		//씬 생성에 성공했으면 CSceneManager의 멤버변수 m_Scene에 업캐스팅을 통해 등록
		m_Scene = (CScene*)Scene;

		return true;
	}

 

 

 

 

 

 

 

<원본 코드>

//class CSceneManager
//SceneManager.h

#pragma once

#include "../SingletonMacro.h"
#include "../GameInfo.h"


class CSceneManager
{

private:
	//씬매니저에서 씬 하나를 관리. 씬은 단 하나만 들고있을 예정.
	class CScene* m_Scene;

public:
	bool Init();

	//반환타입을 bool로 하는 이유는 Scene이 교체되는지 아닌지를 
	//판단하기 위해서이다.
	bool Update(float DeltaTime);
	void Render(HDC hDC, float DeltaTime);

	template <typename T>
	bool CreateScene()
	{
		//씬 생성 및 초기화(실패시 False 반환)
		T* Scene = new T;
		if (!Scene->Init())
		{
			SAFE_DELETE(Scene);
			return false;
		}

		//씬 생성에 성공했으면 CSceneManager의 멤버변수 m_Scene에 업캐스팅을 통해 등록
		m_Scene = (CScene*)Scene;

		return true;
	}


	DECLARE_SINGLETON(CSceneManager)
};
//class CSceneManager
//SceneManager.cpp


#include "SceneManager.h"
#include "MainScene.h"

DEFINITION_SINGLETON(CSceneManager)

CSceneManager::CSceneManager():
	m_Scene(nullptr)
{

}

CSceneManager::~CSceneManager()
{
	SAFE_DELETE(m_Scene);
}

bool CSceneManager::Init()
{
	//템플릿에 CMainScene을 넣어 CreateScene 함수를 통해 생성
	CreateScene<CMainScene>();

	return true;
}



bool CSceneManager::Update(float DeltaTime)
{
	m_Scene->Update(DeltaTime);

	return false;
}

void CSceneManager::Render(HDC hDC, float DeltaTime)
{
	m_Scene->Render(hDC, DeltaTime);
}

'WIN32API FrameWork > 원본' 카테고리의 다른 글

220504_WIN32API_Framework_5-3_실제 Scene 만들고 실행(MainScene)  (0) 2022.05.08
220504_WIN32API_Framework_5-2_Class Scene  (0) 2022.05.08
220504_WIN32API_Framework_4_스마트 포인터(참조 카운트)  (0) 2022.05.06
220503_WIN32API_3-3_조작에 따라 회전하는 총 만들기(삼각함수)  (0) 2022.05.05
220503_WIN32API_Framework_3-2_입력받은대로 캐릭터 이동  (0) 2022.05.05
'WIN32API FrameWork/원본' 카테고리의 다른 글
  • 220504_WIN32API_Framework_5-3_실제 Scene 만들고 실행(MainScene)
  • 220504_WIN32API_Framework_5-2_Class Scene
  • 220504_WIN32API_Framework_4_스마트 포인터(참조 카운트)
  • 220503_WIN32API_3-3_조작에 따라 회전하는 총 만들기(삼각함수)
hyrule
hyrule
hyrule
C++ 프로그래밍 공부
hyrule
전체
오늘
어제
  • 분류 전체보기 (205)
    • C++기초 (50)
    • WIN32API FrameWork (109)
      • 한단계씩 직접 구현 (82)
      • 원본 (15)
      • 코드별 설명 개별저장(검색용) (12)
    • 자습 (21)
    • C++ TIPS (11)
    • 연습 노트 (3)
    • ETC (6)
    • DX2D StarCraft 모작 (1)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • C++
  • hello
  • notion
  • Tistory
  • 스타크래프트
  • Windows 11

최근 댓글

최근 글

hELLO · Designed By 정상우.
hyrule
220504_WIN32API_Framework_5-1_SceneManager
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.