WIN32API FrameWork/한단계씩 직접 구현

14. 씬 Scene 구조 짜기

2022. 5. 18. 14:50

https://hyrule.tistory.com/111 

 

*** 공부 방법 ***

1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처

hyrule.tistory.com

 


Scene 관련 소스코드들은 앞으로 Include/Scene 폴더 안에 저장한다.

폴더를 직접 만든 후 클래스 생성 시 클래스 파일명 앞에 Scene/을 붙여 주면 된다.

 

솔루션 탐색기 상에서도, Scene 필터를 하나 생성하여 모아놓는다.

 

 

 

class CSceneManager

- 싱글턴 패턴으로 생성

- 씬매니저는 일단 초기화 메소드만 생성해 놓는다.

더보기
//SceneManager.h

#pragma once

#include "../Singleton.h"
#include "../GameInfo.h"

class CSceneManager
{
public:
	bool Init();


	DECLARE_SINGLETON(CSceneManager)
};

 

//SceneManager.cpp

#include "SceneManager.h"

DEFINITION_SINGLETON(CSceneManager)

CSceneManager::CSceneManager()
{
}

CSceneManager::~CSceneManager()
{
}

bool CSceneManager::Init()
{
	return true;
}

 


 

class CScene

 

- 씬 클래스를 생성한다.
- 씬 클래스는 외부에서 생성할 수 없고, 상속 관계 또는 씬매니저(friend)를 통해서만 생성이 가능하다.

- 다음 3가지 메소드를 선언및 정의부를 생성만 해 놓는다.(나중에 사용할 예정)

  • Init: 초기화 메소드. 성공시 true, 실패시 false 반환
  • Update: 매 프레임별 씬 속 게임오브젝트들의 상태 Update
  • Render: 매 프레임별 게임오브젝트들 렌더링

class CMainScene: public Scene

- 씬을 상속받는 메인씬을 생성한다.

- 실제로 게임 속에서 동작하게 될 씬이다.
- 마찬가지로 상속 관계 또는 씬매니저(friend)를 통해서만 생성이 가능하다.

- 앞으로 Scene을 상속받는 각각 실제 씬들은, 씬에서 사용할 게임오브젝트를 Init() 함수를 통해 생성만 해 주고,
나머지 과정은 Scene에서 처리할 것이다.

 


 

class CSceneManager

 

- SceneManager 클래스에서 Scene 포인터 변수를 전방선언한다.

- 앞으로 실행될 씬을 이 포인터에 등록해서 관리한다.

더보기
class CScene* m_PresentScene;

CreateScene()

- 템플릿 타입으로 받는 씬을 새로 동적할당하고, 초기화한다.

- 초기화에 성공시 true를 반환, 실패 시 false를 반환한다.

- 현재 씬매니저에 등록된 씬이 없다면 해당 씬을 게임매니저의 씬 포인터 변수에 업캐스팅하여 등록한다.

더보기
	//씬 생성 메소드
	template <typename T>
	bool CreateScene()
	{
		T* Scene = new T;
		
		if(!Scene->Init())
		{ 
			SAFE_DELETE(Scene);
			return false;
		}
			
		//씬 생성에 성공했으면 멤버변수 m_PresentScene에 업캐스팅을 통해 등록
		m_PresentScene = (CScene*)Scene;

		return true;
	}

CreateScene() 메소드를 구현했으면, 씬매니저가 초기화될 때, 메인 씬을 기본 씬으로 등록해 놓는다.

더보기
bool CSceneManager::Init()
{
	CreateScene<CMainScene>();

	return true;
}

CGameManager에서 CSceneManager를 생성 및 제거해준다.

더보기
bool CGameManager::Init(HINSTANCE hInst)
{
    //씬매니저 생성(싱글턴 패턴)
    if (!CSceneManager::GetInst()->Init())
        return false;

}
CGameManager::~CGameManager()
{
    CSceneManager::DestroyInst();
}

 

 

씬 구조 준비 완료

 


GameFrameworkStepbyStep_14_SceneStructure.zip
1.27MB

'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글

16. (기타 설정)복사 생성자, TypeID 지정  (0) 2022.05.18
15. 참조 카운트로 게임오브젝트 관리  (0) 2022.05.18
13. 참조 카운트(Reference Count), 공유 포인터(Shared Pointer)  (0) 2022.05.18
12. 삼각함수를 통해 Player에 총을 달아주고 회전/이동시키기  (0) 2022.05.17
11. Player에게 총을 달아주고 입력을 받아 회전시키기  (0) 2022.05.17
'WIN32API FrameWork/한단계씩 직접 구현' 카테고리의 다른 글
  • 16. (기타 설정)복사 생성자, TypeID 지정
  • 15. 참조 카운트로 게임오브젝트 관리
  • 13. 참조 카운트(Reference Count), 공유 포인터(Shared Pointer)
  • 12. 삼각함수를 통해 Player에 총을 달아주고 회전/이동시키기
hyrule
hyrule
hyrule
C++ 프로그래밍 공부
hyrule
전체
오늘
어제
  • 분류 전체보기 (205)
    • C++기초 (50)
    • WIN32API FrameWork (109)
      • 한단계씩 직접 구현 (82)
      • 원본 (15)
      • 코드별 설명 개별저장(검색용) (12)
    • 자습 (21)
    • C++ TIPS (11)
    • 연습 노트 (3)
    • ETC (6)
    • DX2D StarCraft 모작 (1)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

hELLO · Designed By 정상우.
hyrule
14. 씬 Scene 구조 짜기
상단으로

티스토리툴바

개인정보

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

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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