KoreanFoodie's Study
윈도우 API 프로그래밍 5 : 물체 떨어뜨리기 (간단한 똥피하기 게임 예제) 본문
윈도우 API 프로그래밍 5 : 물체 떨어뜨리기
이번 글에서는 간단한 물체를 떨어뜨리는 기능을 구현하며 다른 디테일을 설명한다.
WM_CREATE
case WM_CREATE: // 프로그램이 실행 될 때 한번 호출 된다. (초기화)
SetTimer(hWnd, 1, 10, NULL);
srand(time(NULL));
break;
초기화 함수를 통해 타이머를 SET 하고, 랜덤 함수를 호출한다.
WM_TIMER
case WM_TIMER: // 타이머에 의해서 호출
{
InvalidateRect(hWnd, NULL, true);
// 포지션 위치에 따른 렉트 정보 업데이트
rtBox1 = RECT_MAKE(ptPos1.x, ptPos1.y, 50);
if (nDelay == 50)
{
RECT rt;
rt.left = rand() % (WINSIZEX - 15);
rt.right = rt.left + 30;
rt.top = -30;
rt.bottom = 0;
vecRect.push_back(rt);
nDelay = rand() % 50;
}
else
nDelay++;
vector<RECT>::iterator iter;
for (iter = vecRect.begin(); iter != vecRect.end(); iter++)
{
iter->top += 10;
iter->bottom += 10;
if (iter->top > WINSIZEY)
{
vecRect.erase(iter);
break;
}
}
}
break;
1초에 100번 실행되는 WM_TIMER를 통해, delay를 50을 줌으로써 새로운 RECT 생성 간격을 조절하고 있다.
보면 vector를 선언하여 RECT를 해당 백터에 삽입한 다음에, 해당 RECT가 WINSIZEY를 넘어갔을 때 이를 삭제시키는 방식으로 구현하였다. WM_TIMER에서 선언된 RECT들은 WM_PAINT에서 실제로 그려질 것이다.
WM_KEYDOWN
case WM_KEYDOWN: // 키 입력이 있을 때 마다 호출 된다.
switch (wParam)
{
// 삼항식 (조건) ? 참일 때 : 거짓일 때
case 'A': case VK_LEFT:
ptPos1.x -= (rtBox1.left >= fMoveSpeed) ? fMoveSpeed : 0;
break;
case 'D': case VK_RIGHT:
ptPos1.x += (rtBox1.right <= WINSIZEX - fMoveSpeed) ? fMoveSpeed : 0;
break;
}
WM_KEYDOWN 블록에서는 좌, 우 이동만 하면 되므로 A와 D만 인식하도록 코드를 정리했다.
WM_PAINT
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
RECT_DRAW(rtBox1);
for (int i = 0; i < vecRect.size(); i++)
{
RECT_DRAW(vecRect[i]);
}
EndPaint(hWnd, &ps);
}
break;
for문을 하나 삽입해서 떨어지는 RECT들을 그린다. 실제로 실행해보면 아래와 같은 화면이 나오게 된다!
왼쪽 상단에 있는 텍스트는 다음 글에서 설명할 예정이다!
더 자세한 내용이 궁금하시다면 직접 들어보시는 걸 추천드립니다!
'Game Dev > 윈도우 API' 카테고리의 다른 글
윈도우 API 프로그래밍 7 : 게임 프레임워크 구성 (0) | 2021.10.15 |
---|---|
윈도우 API 프로그래밍 6 : 간단한 UI 구현과 똥피하기 게임 예제 (0) | 2021.10.15 |
윈도우 API 프로그래밍 4 : 충돌 검사 (IntersectRect...) (0) | 2021.10.15 |
윈도우 API 프로그래밍 3 : 키 입력과 게임 업데이트 (0) | 2021.10.15 |
윈도우 API 프로그래밍 1, 2 : 창 생성 및 기본 세팅과 도형 그리기 (0) | 2021.10.15 |
Comments