응애맘마조

221212 강의 본문

공부/2D강의

221212 강의

TH.Wert 2022. 12. 13. 00:19

이제부터 구조가 조금씩 바뀌게 됩니다. 엄청나게 크게 바뀌는 건 아니고 여태까지는 메인cpp 파일 안에 코드를 작성하고 실행을 시켰었는데 파일 하나 안에 여러 가지를 실행하게 되면 코드가 지나치게 길어질뿐더러 C++의 객체 지향에 맞지 않기 때문에 각각에 맞는 실행 내용대로 옮기게 되었습니다. 이 작업은 수요일까지 하게 될 예정입니다.

System이라는 필터를 새로 만들고 Type.h와 Type.cpp를 추가하였습니다. 안에는 Scene이라는 클래스를 만들었습니다.
Scene은 사전적으로 '장면'이라는 뜻을 가지고 있습니다. 이는 게임에서 표현하자면 Map(마을 맵, 던전 맵, 보스 맵 등등)의 개념을 가지고 있습니다. 그렇게 어떤 맵에서 다른 맵으로 이동을 하는 것을 Scene의 전환이라고 합니다.

이러한 Scene 클래스 안에는 변수도 있고 함수도 있겠지만 최상위 클래스로 하고 변수는 따로 만들지 않고 함수만 선언을 했습니다. 이 함수 끝에는 '= 0'을 붙였는데 이를 순수가상함수라고 합니다. 순수가상함수가 있는 클래스를 추상 클래스라고 하며 순수가상함수만 있는 클래스를 인터페이스라고 합니다. 추상 클래스는 자식 클래스로 할당을 해야 하기 때문에 값이 바뀌면 보안상의 문제가 생기기 때문에 객체화를 불가능하게 만들었습니다. 인터페이스는 무조건 재정의가 필요합니다. 객체를 만들 수 있도록 틀을 갖출 수 있게 해주는 역할을 합니다. 부모클래스로부터 자식클래스로 할당하도록 명시하는 것을 추상화라고 하며 앞으로는 게임이나 프로젝트 등 이러한 작업들을 추상화를 하여 만들게 됩니다.

메인cpp 안에 WM_TIMER를 새로 작성하였습니다. 이는 메시지를 일정 주기(밀리초 단위)마다 발생시킵니다.
10을 작성하면 10밀리 초가 되고 1000을 작성하면 1초가 됩니다. (강의에서는 10밀리 초로 작성하였습니다.)

※밑에서 설명하는 업데이트는 주기를 갱신하는 내용입니다. 값이 유동적으로 변하게 되는 키 입력 같은 것들을 밀리 초로 갱신하게 됩니다.
public 안에 Init이라고 있는데 이는 Initialize의 약자이며 초기화를 담당합니다.
클래스 안에 InvalidateRect를 작성하였는데 이는 갱신 작업을 담당합니다. bool로 선언이 되어 있으며 false를 하면 업데이트를 하지 않게 되어서 일정 주기로 갱신을 하지 않고 계속 그리기 때문에 키보드를 입력하여 객체를 이동하게 되면 잔상이 남아서 움직이는 것처럼 됩니다. 상황에 따라 어떻게 쓰게 될지 달라지겠지만 단순히 이동을 하게 하는 목적이라면 true로 해서 잔상이 남지 않고 계속 갱신을 해주는 것이 좋습니다.

이때 키 입력을 받을 수 있게 해주는 함수는 GetAsyncKeyState입니다. 이는 메시지큐를 거치지 않고 키 입력을 받아오는 함수입니다. (자세한 것은 내일 한다고 했습니다.)

하지만 이렇게 하게 되면 10밀리 초마다 갱신이 되기 때문에 객체가 쉴 새 없이 깜박거리게 되며 이는 사용자에게 불편함을 주게 됩니다. 이때 사용하는 것이 더블 버퍼링입니다. 말 그대로 버퍼를 2개 사용한다는 의미입니다.
(여기서 버퍼는 무언가를 적재하는 공간입니다.)

더블 버퍼링은 버퍼 하나는 사용자에게 보이지는 않지만 보이지 않는 버퍼에서는 그리게 되는 것이고 다른 하나는 복사해서 옮겨 그려서 사용자에게 보여주는 버퍼입니다. (앞으로 강의에서는 g_MemDC가 뒤에서 보이지 않는 버퍼입니다.)

어떻게 보면 SwapChain 하고 비슷할 수도 있습니다. 이는 DirectX에서 사용하게 되므로 해당 게시물에서 작성하는 더블 버퍼링은 개념만 알면 되고 크게 중요하지는 않습니다.
더블 버퍼링과 스왑 체인의 다른 점은 더블 버퍼링은 복사해서 옮겨 그리는 것이고 스왑 체인은 바꿔치기를 하는 정도로 이해를 하면 될 것 같습니다.

12월 13일 화요일은 남부터미널역 근처의 예술의 전당에서 개최하는 넥스테이지에 가게 됩니다. 사람이 얼마나 많이 오게 될지는 모르겠지만 AGF처럼 단기간 개최하는 것이 아니기 때문에 조금은 쾌적할 수도 있을 것 같습니다.
읽어주셔서 감사합니다.

'공부 > 2D강의' 카테고리의 다른 글

221214 강의  (0) 2022.12.14
221213 강의  (0) 2022.12.14
221209 강의  (0) 2022.12.10
221207 강의  (0) 2022.12.08
221206 강의  (0) 2022.12.07
Comments