*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처
hyrule.tistory.com
[사전 지식]
- STL에서는 기본적으로 정렬 알고리즘을 제공하고 있다.
- (자료구조).sort(bool 타입을 반환하는 함수 포인터)
-- 함수 포인터로는 전역 함수만을 받는다. 이 함수 포인터로 정렬 기준을 정한다.
--- static 멤버 메소드로 선언하면 전역 함수와 똑같이 취급되므로, 사용할 비교 메소드를 static으로 선언해주자.
- 지금 게임을 구동시켜보면, 무조건 몬스터가 플레이어 위에 렌더링되는 것을 확인할 수 있다.
- 씬이 생성될 떄 CGameObject를 생성한 순서대로 렌더링되고 있기 때문이다.
- 일반적인 2D게임은 화면의 밑에 있는 캐릭터가 화면의 위에 있는 캐릭터를 가리고 있다.
- 게임오브젝트의 Y축 값이 낮은 순을 기준으로 렌더링하는 것이다.
- 이것을 Y소팅이라고 한다.
class CScene
- 렌더링 메소드 안에서 각 CGameObject의 발 밑 Y축을 기준으로 소팅해준다.
- 근데 그냥 이렇게 해놓으면 문제가 발생한다.
- Y축이 가장 낮은 '배경화면'까지 정렬되어 배경화면이 가장 마지막에 그려지고, 결국 배경화면이 화면을 다 가려버리게 되는 것이다.
- 그러므로 '출력 그룹'을 나누어놓아 해당 그룹 안의 오브젝트 끼리만 정렬을 시켜줄 필요가 있다.
flag.h
< enum class ERender_Layer >
- 렌더링 그룹을 나누기 위한 열거체,
- 일단 기본적으로 Back, Default, Effect, Max 정도만 생성하자. Max는 배열 선언을 위한 원소이다.
class CGameObject
< m_ObjList >
- 이제 CGameObject가 그룹별로 나누어져야 하므로,
- 기존의 리스트를 ERender_Layer의 사이즈만큼 크기의 배열로 나눠 준다.
< ERender_Layer m_RenderLayer >
- 이제 게임오브젝트는 각자 자신이 어느 그룹에 속해야 하는지를 변수로 가지고 있는다.
- 생성자에서 기본값으로 Default 그룹에 설정해준다.
- 그리고 다른 그룹으로의 분류가 필요한 오브젝트들만 생성자에서 값을 따로 설정해 준다.
- 이제 m_ObjList는 배열이 되었으므로 게임오브젝트를 생성하는 CScene::CreateObject() 메소드도 ERender_Layer에 맞는 배열 인덱스로 넣어주어야 한다.
- 소멸자와, Update(), PostUpdate(), Render() 메소드 안의 반복문도 모두 수정해준다.
'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글
42. 충돌 처리 1 (0) | 2022.05.29 |
---|---|
41. 카메라 (0) | 2022.05.29 |
39. 배경화면 생성 및 플레이어 이동 (0) | 2022.05.28 |
38-1. 애니메이션을 등록하는 다양한 방법들 (0) | 2022.05.28 |
38. 애니메이션 시퀀스 2(완료) (0) | 2022.05.26 |