목록Window API (6)
개발하는 리프터 꽃게맨입니다.
최근에 만들 윈도우 API 프로그램입니다. 방향키를 누르면 사각형이 이동합니다. 그런데 이동을 하면 잔상이 남는 모습을 볼 수 있습니다. 그림을 그리는 것은 모니터의 픽셀 버퍼에 원하는 값을 저장하는 형식으로 진행됩니다. 우리가 이전 버퍼를 지워주지 않았으니 이렇게 잔상이 남는 것이죠. 이런 식으로 매우 큰 흰색 사각형을 그려줘서 지워주는 건 어떨까요? 아마 매우 빠르게 깜빡 깜빡 거릴겁니다. 이게 왜 그렇냐면 그리기 버퍼를 단 1개만 사용해서 그렇습니다. 컴퓨터가 아무리 빨라도 화면에 픽셀을 하나하나 그려서 모두 그리는데 시간이 걸리겠죠? 저 코드를 넣어주면, 컴퓨터가 원하는 그림을 먼저 싹 그린 다음에 흰 색 큰 사각형을 싹 그려주고.. 를 반복합니다. 그러면 깜빡깜빡 거린다는 거죠. 깜빡이는 이유는..
이런 오브젝트가 있다고 해봅시다. 이 오브젝트는 방향키를 누르면 상하좌우로 움직이며 그 값은 0.1 만큼 움직입니다. 그런데 이 코드에는 문제가 있죠. 바로 하드웨어 성능에 따라 초당 이동거리가 다르다는 것입니다. 이게 무슨 의미일까요? 컴퓨터 A는 계산속도가 매우 빨라서 1초에 10000번 계산합니다. 컴퓨터 B는 계산속도가 매우 느려서 1초에 100번 계산합니다. 위 코드에 의하면 컴퓨터 A에서 게임을 실행시 1초에 1000 만큼 이동하고 컴퓨터 B에서는 게임을 실행시 1초에 10 만 이동하죠. 만약, 레이싱 게임이라고 했을때 내 컴퓨터 사양이 구리다는 이유로 매번 경기에서 지면 억울할겁니다. 그렇기에 컴퓨터 사양에 구애받지 않는 상대적인 시간을 얻어야하는데 그것이 바로 델타타임 입니다. 그럼 이는 ..
게임은 총 3개의 함수에 의해 진행됩니다. (1) 초기화 함수 (2) 업데이트 함수 (3) 렌더링 함수 초기화 함수는 게임 시작에 있어서 초기에 설정해야할 값을 정의하고, 메인 루프에서는 업데이트 함수와 렌더링 함수가 계속 실행되면서 연산 및 그리기 작업을 수행합니다. 그래서 우리는 게임을 관리할 매니저 클래스가 필요합니다. 그것을 GameManager 라고 하고, 여기서 싱글톤 패턴을 사용하게 됩니다. 아래는 싱글톤에 대해 참고할 포스팅입니다. 더보기 https://powerclabman.tistory.com/66 [C++/디자인패턴] 싱글톤 (Singletone) 개요 싱글톤 패턴은 하나의 클래스가 하나의 객체만 가지도록 하면서 이 객체에 대한 접근은 전역으로 제공하는 디자인 패턴 입니다. 게임을 만..
https://powerclabman.tistory.com/77 [WinAPI] hWnd 윈도우 핸들, hDC hWnd 핸들 윈도우란 뭔가? 윈도우의 핸들은 운영체제의 커널 오브젝트를 사용하기 위해 필요한 장치라고 볼 수 있습니다. 우리가 프로그램으로 만든 윈도우는 고유 식별 id가 있습니다. 이런 고유 powerclabman.tistory.com 이전 포스팅에서 말했듯 GetMessage는 게임 루프를 돌리는데 적합하지 않습니다. 게임은 보통 1초에 60번의 업데이트 및 렌더링을 제공해야하는데, GetMessage의 경우 메시지 큐에서 메시지를 꺼내고, 어떤 메시지인지 확인하는 과정이 시간이 생각보다 많이 걸리기 때문이죠. 더하여 메시지 큐에 메시지를 넣어주지 않으면 무한정 대기하는 참사가 일어납니다...
hWnd 핸들 윈도우란 뭔가? 윈도우의 핸들은 운영체제의 커널 오브젝트를 사용하기 위해 필요한 장치라고 볼 수 있습니다. 우리가 프로그램으로 만든 윈도우는 고유 식별 id가 있습니다. 이런 고유 식별 id를 HWND로 관리하고 있다고 보시면 됩니다. 객체가 메모리단에 잡히긴 했는데 우리가 함부로 접근할 수 없습니다. 윈도우는 운영체제가 관리하는 객체이기 때문이죠. 그래서 우리는 hwnd라는 id를 통해서 윈도우를 간접적으로 다뤄야만 하는 것입니다. 윈도우에서 동작하는 프로그램을 만들기 위해서는 무조건 hwnd를 다뤄야만 합니다. 화면에 그림을 그리는 것 또한 hwnd에 접근해서 그려줘야만 하죠 이런 식으로 말이죠. 추가적으로 윈도우 프로그래밍을 할 때는 이 H 자료형 시리즈가 중요합니다. HPEN HDC..