KoreanFoodie's Study
윈도우 API 프로그래밍 3 : 키 입력과 게임 업데이트 본문
윈도우 API 프로그래밍 3 : 키 입력과 게임 업데이트
이번 글에서는 WIM_KEYDOWN을 통한 키 입력에 대해 알아보도록 한다.
키 입력 처리하기
case WM_CREATE: // 프로그램이 실행 될 때 한번 호출 된다. (초기화)
SetTimer(hWnd, 1, 10, NULL);
break;
case WM_TIMER: // 타이머에 의해서 호출
InvalidateRect(hWnd, NULL, true);
break;
case WM_KEYDOWN: // 키 입력이 있을 때 마다 호출 된다.
switch (wParam)
{
// 삼항식 (조건) ? 참일 때 : 거짓일 때
case 'A': case VK_LEFT:
ptPos.x -= (ptPos.x > 0) ? 1 : 0;
break;
case 'D': case VK_RIGHT:
ptPos.x += (ptPos.x < 15) ? 1 : 0;
break;
case 'W': case VK_UP:
ptPos.y -= (ptPos.y > 0) ? 1 : 0;
break;
case 'S': case VK_DOWN:
ptPos.y += (ptPos.y < 8) ? 1 : 0;
break;
}
break;
키 입력은 WM_KEYDOWN에서 처리하는데, 삼항식 조건을 잘 보면 ptPos라는 POINT를 다룸에 있어서 화면 밖으로 나가지 않도록 처리한 것을 확인할 수 있다.
WM_TIMER에서는 타이머를 다루며 갱신할 부분을 넣게 되는데, WM_CREATE에서 초기화 시, SetTimer(hWnd, 1, 10, NULL); 에서 1초에 100번 갱신함을 알 수 있다. (1000 / 세번째 인자) -> 1초에 갱신하는 횟수
실제로 그리기
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
int roomSize = WINSIZEY / 9;
for (int i = 0; i < 10; i++)
{
MoveToEx(hdc, 0, i * roomSize, NULL);
LineTo(hdc, WINSIZEX, i * roomSize);
}
for (int i = 0; i < 17; i++)
{
MoveToEx(hdc, i * roomSize, 0, NULL);
LineTo(hdc, i * roomSize, WINSIZEY);
}
int ptX = ptPos.x * roomSize;
int ptY = ptPos.y * roomSize;
Rectangle(hdc, ptX + 10, ptY + 10, ptX + roomSize - 10, ptY + roomSize - 10);
EndPaint(hWnd, &ps);
}
break;
PAINTSTRUCT 와 HDC는 자동 생성되는 코드이니 넘어가자.
이전 글처럼, 격자를 그리는 것은 동일하지만, 그 후에 roomSize를 계산하여 격자 내부에 사각형을 넣어 주었다.
그리고 WM_KEYDOWN을 통해 ptPos를 변경시켰으므로, 우리는 키를 움직일 때마다 사각형이 격자를 이동하는 것을 확인할 수 있다!
더 자세한 내용이 궁금하시다면 직접 들어보시는 걸 추천드립니다!
'Game Dev > 윈도우 API' 카테고리의 다른 글
윈도우 API 프로그래밍 7 : 게임 프레임워크 구성 (0) | 2021.10.15 |
---|---|
윈도우 API 프로그래밍 6 : 간단한 UI 구현과 똥피하기 게임 예제 (0) | 2021.10.15 |
윈도우 API 프로그래밍 5 : 물체 떨어뜨리기 (간단한 똥피하기 게임 예제) (0) | 2021.10.15 |
윈도우 API 프로그래밍 4 : 충돌 검사 (IntersectRect...) (0) | 2021.10.15 |
윈도우 API 프로그래밍 1, 2 : 창 생성 및 기본 세팅과 도형 그리기 (0) | 2021.10.15 |
Comments