운영체제/입출력 시스템 : Windows API

[게임 프로그래머 입문 올인원] Windows API 입문 : Scene과 SceneManager (88강)

순정법사 2024.04.06

A. Scene과 SceneManager

로비창인지 게임창인지 구분하기 위한 scene

플레이어와 몬스터는 object로 구분해서 만듦

 

➡ 지금은 엔진 / 컨텐츠 섞어서 만들지만 나중엔 구분하게 됨 

 

1. 기본 틀 잡기

a. Scene, object 생성하기

필터를 각각 02, 03으로 생성해주고

 

02.Scene에 Scene 클래스를 생성함

 

Scene은 최상위 객체, 화면의 모든 처리나 물체의 제어를 담당함

 

📁 02.Scene > 📄 Scene.h

 

이렇게 가상함수로 만들어주기 (소멸자에 virtual 필수)

 

📁 02.Scene >  📄 Scene.cpp

 

 

b. SceneManager 생성하기

모든 오브젝트들을 관리하는 역할

 

그 Scene을 제어할 Manager 생성

 

📁 99.Headers > 📄 Enums.h

 

여러가지 씬을 하나로 관리하기 위한 Enums을 작성해주고

 

📁 01.Manager > 📄 SceneManager.h

 

 

💙 SceneManager가 Scene을 하나씩 들고 있는 이유

영화촬영처럼 다양한 화면을 촬영해야 한다면
화면에 들어가는 물체와 공간, 규칙들을 각 환경에 따라 모두 다르게 설정해야 하는데 
모든걸 하나에 놓으면 나누기 굉장히 애매해짐  

👉 따라서 Scene을 따로 둬서 관리하는 것!

 

📁 01.Manager > 📄 SceneManager.cpp

 

씬에 따라 현재 씬타입이 바뀌도록 설정하기

 

c. GameScene, DevScene 생성하기

위에서 작성한 새로운 Scene 만들기처럼 새로운 Scene을 만들어줌

 

엔진쪽이 아닌 파일은 새로운 Game 폴더를 파서 관리

 

 

📁 02.Scene >  📁 Game >  📄 DevScene

 

개발씬에서는 플레이어를 test로 그려볼것임

 

위에서 만든 Scene을 상속받는 DevScene 작성 /  저번에 작성한 Util::DrawCircle을 사용해 플레이어를 렌더링해주고

 

상속받으면 전방선언은 의미없음, 무조건 include로 상속받는 객체를 받아줘야함

 

📁 02.Scene >  📁 Game >  📄 GameScene

 

상속받게 잘 작성해주기

 

d. SceneManager 작성하기

📁 01.Manager > 📄 SceneManager.cpp

 

다시 씬매니저로 돌아와서 타입에 따라 씬을 바꿔주는 코드를 작성해주기

 

빨간줄은 서순탓이고 블로그 순서대로 하면 없음

 

📁 99.Headers > 📄 Defines.cpp

이때 씬을 지워주는 코드는 자주 사용되니 메크로로 따로 작성해주고
작성된 코드를 사용하는 clear 코드도 작성해주기

 

Update함수와 Render함수도 작성

 

e. Game.cpp파일 작성하기

SceneManager.h 추가해주고

 

SceneManager을 호출하니 클리어하는 코드 작성해주고

 

Init, Update에 SceneManager 추가해주기, ChangeScene에 기본값 DevScene으로 만들어주기

 

그럼 이제 Game의 Render에서 호출하던 이 코드가 SceneManager의 Scene -> Render로 이동하게 됨

 

그래서 SceneManager의 Render을 호출해주기

 

잘 그려짐

 

2. 기능 생성하기

 a. DevScene으로 원 움직이기

추가해주고

 

컴퓨터마다 다른 Update 속도가 아닌 deltaTime에 맞게 이동해주기

 

잘 움직여진다~!!

 

b. 문제점 처리

1) 대각선

 

대각선으로 움직이면 빨라지는걸 볼 수 있는데 이건 나중에 게임 수학을 배워서 처리할 예정!!

 

2) 잔상

 

더블 버퍼링으로 처리 

하나는 그리는 용도로 사용, 하나는 출력하는 용도로 사용해서 다 그렸다면 출력하는 방식으로 

 

➡ 다음 시간 주제!!

 

 

 


출처 : https://www.inflearn.com/course/%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8-%EC%9E%85%EB%AC%B8-%EC%98%AC%EC%9D%B8%EC%9B%90-rookiss#curriculum

 

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버 -

어디부터 시작할지 막막한 게임 프로그래밍 입문자를 위한 All-In-One 커리큘럼입니다. C++, 자료구조/알고리즘, STL, 게임 수학, Windows API, 게임 서버 입문으로 이어지는 알찬 커리큘럼으로 게임 프

www.inflearn.com