2019년 5월 16일 목요일

국비 교육 : 게임 프로그래밍 040일

40일 차 교육 내용 메모를 옮겨 본다.
HDC 와 화면 버퍼링, 키 입력에 대한 내용이 메모에 작성되어 있다.


HDC 란
- H : 핸들
- DC : 그리기에 필요한 모든 정보를 가진 데이터 구조체
 (DC의 내부 정보 종류로는 HPEN, HBRUSH, HFONT 등...)

화면 깜박임
- invalidaterect() 함수
- 무효화 영역 강제 발생
- WM_PAINT 강제 호출
- 매개변수 = HWND , RECT , ERASE
- ERASE : 이전 기록의 유지 유/무 , true 시 캔버스를 초기화
- 함수의 ERASE 가 true 라서 발생

근본적인 원인
- 그리는 사이사이의 캔버스가 화면에 그대로 노출되어 있기에


해결책
- 1번만 그리면 된다.
- 다른 HBITMAP에 그린 이후에 이 HBITMAP을 1회 화면에 그린다.


더블 버퍼링  or 백 버퍼링
- 임시 버퍼를 생성하여, 해당 버퍼에 렌더링 작업을 모두 진행한 이후 실제 버퍼로 데이터를 일제히 이동시켜 나타내는 방법

백 버퍼링 방법
1. 임시 종이 : HBITMAP
2. 임시 종이 정보를 다 그린다.
3. 임시 종이를 앞 종이에 옮겨 그린다.

문제 : HBITMAP에 직접 그리는 방법이 존재하지 않는다.

해결책
1. 기존 HDC와 동일한 HDC를 하나 더 만든다.
2. HBITMAP을 만든다.
3. 새로 만든 HDC에 새로 만든 HBITMAP을 넣는다.
4. DC간 고속 복사 함수로 HBITMAP을 복사한다.
5. HBITMAP 과 HDC를 지운다.


키 상태 체크
- GetKeyState 반환값
 최상위 1bit = 현재 눌렸는가
 최하위 1bit = 토글

- GetASyncKeyState
 최상위 1bit = 현재 눌렀는가
 최하위 1bit= 이전에 눌렀었는가

- 두 함수의 차이점
 GetKeyState : 메시지 큐에서 눌림을 확인한다.
 GetASyncKeyState : 함수 확인 시점에서의 눌린 상태를 확인한다.


교육된 키 입력 방식을 토대로 Key 입력의 stay, once_down , once_up , toggle 의 4가지 상태를 함수로 구현해 보는 과제를 줬다.

댓글 없음:

댓글 쓰기

Unity - Firebase 연동 (Analytics, AdMob)

버전 : firebase_unity_sdk_6.5.0.zip 게임에서 통계 측정 및 광고 추적을 위해 Firebase 을 연동한다. 앞서 [Unity - GPGS 와 Admob 연동 및 배포 준비 작업]  연동 이후에 작업을 진행 한다. 유니...