배경 연속적으로 돌리기
한 비트맵의 이미지로 마치 배경이 움직이는 듯한 스크롤을 구현..
간단한 슈팅게임을 만들때 배경이 연속적으로 움직이면서 좀더 멋진 화면이 나타날수 있다... (비트맵이 좀 괜찮다면....)
그대신 스크롤 될때 좀 이어지는 비트맵이어야 이쁘게 나온다... 간단한 게임상에서는 뒤에 파란배경을 출력하고 구름 이미지를 연속적으로 돌려도 괜찮은 화면이 나온다.
배경이미지가 640 x 480 사이즈의 back.bmp 라고 한다면...
LRESULT CALLBACK WndProc( HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam )
{
static HDC hdc, MemDC, hBackDC;
HBITMAP hbitmap, oldbitmap, hbackbitmap, oldbackbitmap;
PAINTSTRUCT ps;
RECT rt;
static bx = 0;
switch( message )
{
case WM_CREATE:
hdc = GetDC(hWnd);
MemDC = CreateCompatibleDC(hdc);
hbitmap = (HBITMAP)LoadImage(NULL, ".\\back.bmp", IMAGE_BITMAP,
NULL, NULL, LR_DEFAULTSIZE | LR_LOADFROMFILE);
oldbitmap = (HBITMAP)SelectObject(MemDC, hbitmap);
hBackDC = CreateCompatibleDC(hdc);
hbackbitmap = CreateCompatibleBitmap(hdc, 640, 480);
oldbackbitmap = (HBITMAP)SelectObject(hBackDC, hbackbitmap);
ReleaseDC(hWnd, hdc);
return 0 ;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
Rectangle(hBackDC, 0, 0, 640, 480);
// 같은 이미지 두개를 이어서 출력하는 원리이다. 이 두개가 스크롤되면서 자연스럽게 뒤에 붙게된다..
SetRect(&rt, bx, 0, 640, 480);
BitBlt(hBackDC, 0, 0, rt.right, rt.bottom, MemDC, rt.left, 0, SRCCOPY);
SetRect(&rt, 0, 0, bx, 600);
BitBlt(hBackDC, 640 - bx, rt.top, rt.right, rt.bottom, MemDC, 0, 0, SRCCOPY);
if(bx >= 640) bx = 0;
else bx += 5;
BitBlt(hdc, 0, 0, 640, 480, hBackDC, 0, 0, SRCCOPY);
EndPaint(hWnd, &ps);
Sleep(20);
InvalidateRect(hWnd, NULL, FALSE);
return 0;
.........................
}
return 0 ;
}
bx 값을 이용하여 배경을 연속적으로 돌릴수 있다.
'C & C++ > MFC Media' 카테고리의 다른 글
Dialog 를 캡쳐하여 인쇄하기 (0) | 2011.10.25 |
---|---|
CListCtrl 에 이미지(tga, png, jpg, tif, bmp) 컨트롤 하기 (0) | 2011.04.28 |
화면 갱신 OnPaint(), OnDraw(), Invalidate() (0) | 2011.04.27 |
GDI 를 이용한 그래픽 출력을 위한 모든 도구, 함수의 집합 (0) | 2011.04.25 |
GDI 를 이용한 화면출력 (0) | 2011.04.25 |
댓글