개발하는 리프터 꽃게맨입니다.

[WinAPI] 싱글톤과 GameManager, 윈도우 해상도 설정하기 본문

Window API

[WinAPI] 싱글톤과 GameManager, 윈도우 해상도 설정하기

파워꽃게맨 2024. 2. 1. 00:50

게임은 총 3개의 함수에 의해 진행됩니다.

 

(1) 초기화 함수

(2) 업데이트 함수

(3) 렌더링 함수

 

초기화 함수는 게임 시작에 있어서 초기에 설정해야할 값을 정의하고,

메인 루프에서는 업데이트 함수와 렌더링 함수가 계속 실행되면서

연산 및 그리기 작업을 수행합니다.

 

그래서 우리는 게임을 관리할 매니저 클래스가 필요합니다.

그것을 GameManager 라고 하고, 여기서 싱글톤 패턴을 사용하게 됩니다.

 

아래는 싱글톤에 대해 참고할 포스팅입니다.

 

게임 매니저를 싱글톤으로 설정하는 이유는 

게임 매니저는 유일해야하고, 전역에서 접근하면 간편하기 때문입니다.

 

 

이것이 게임 매니저의 기본 구조입니다.

간단한 구조의 싱글톤 패턴을 보이고 있으며,

외부 생성을 막기위해서 private로 생성을 제한하고 있습니다.

 

또, 앞서 말했던 Init, Update, Render 함수를 기본적으로 가지고 있고

멤버로는 이제 윈도우 커널을 사용하기 위한

핸들 윈도우, 디바이스 컨텍스트를 가지고 있고

 

추가적으로 해상도를 설정하기 위해 resolution 을 가지고 있습니다.

 

 

이쪽이 게임 매니저 cpp 입니다.

 

멤버함수를 초기화해주고 있고,

윈도우 해상도를 설정해주고 있습니다.

 

여기서 SetWindowPos 함수가 윈도우 사이즈와 처음 프로그램을 실행시켰을 때 윈도우가 켜지는 위치를 설정하는 역할을 합니다.

그런데 왜 AdjustWindowRect이라는 의문의 함수가 중간에 들어갔냐면,

 

보통

1280, 720 해상도의 화면을 만들고 싶다고 매개변수에 입력하면,

 

 

메뉴바와 테두리를 포함해서 1280 x 720 해상도의 윈도우를 만들어 줍니다.

우리가 실상 관심있는건 가운데 표현되는 작업 영역인데 말이죠..

 

그래서 AdjustWindowRect는 이를 보정해주는 역할을 합니다.

 

 

해당 함수를 이용하면 RECT 자료형의 내부 변수들이

운영체제의 윈도우 창 환경에 맞게 보정된 상태로 나오게 됩니다.

 

이제 이 windowRect 변수를 베이스로 하여 윈도우 창의 크기를 설정해주면 원하는 해상도로 윈도우 창을 만들어낼 수 있습니다.

 

 

메인 루프쪽을 이렇게 바꿀 수 있습니다.

 

 

이제 게임 매니저의 Update함수쪽에 로직을

Render 쪽에는 hdc에 그리는 코드를 그려주면 게임을 만들어줄 사전 작업은 끝납니다.

 

Render 쪽에 사각형을 그리고

Update 쪽에 방향키를 눌러서 캐릭터를 이동시키는 로직을 추가하면, 간단하게

8방향으로 이동하는 게임을 만들 수 있는 것이죠.

 

다음 포스팅에 또 뵙겠습니다.

 

 

 


참고)

이 카테고리는 개인 공부를 위해서 정리해논 게시글 입니다.

온전히 제가 이해할 수 있는 문맥과 단어 선택으로 서술되기에, 

이 게시글 시리즈에는 생략된 부분이 상당히 많을 뿐더러 배우는데 도움도 되지 않을 겁니다.

 

그래도 궁금한거 있으신 분들은 댓글을 꼭 달아주세요