1.7 백그라운드처리를 통한 이미지 움직이기
백그라운드처리는 다음과 같은 단계로 진행된다.
- 이미지를 백그라운드에서 처리하도록 함수를 먼저 호출한다.
- 루프 마지막에 백그라운드를 포어그라운드로 반영시켜주는 함수를 호출한다.
백그라운드 처리를 위한 함수는 SetDrawScreen( DX_SCREEN_BACK ); 이며 이 문장을 추가 함으로써 이미지를 백그라운드에서 포어그라운드로 처리해주는 단계를 자동적으로 처리 해준다. 이후 루프의 마지막에 이미지를 포어그라운드에 반영해주는 ScreenFlip함수를 호출하면 된다. 이 역시 단순히 호출만 하면 되는 작업이라 자세한 설명은 생략한다.
#include <DxLib.h> int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode( TRUE ); DxLib_Init(); SetDrawScreen( DX_SCREEN_BACK ); //이미지 백그라운드 처리 설정 int x = 0; int Handle; Handle = LoadGraph( "image/character_01.png" ); while( 1 ){ if( ProcessMessage() != 0 ){ break; } ClearDrawScreen(); DrawGraph( x, 100, Handle, TRUE ); x = x + 2; ScreenFlip(); //백그라운드 화면을 포어그라운드 화면에 반영 }
DxLib_End(); return 0; } |
실행결과
이와 같은 결과를 볼 수 있게 된다. 코딩시에는 반드시 백그라운드 처리를 염두해두고 작업하도록 한다.
지금까지의 내용을 정리하면
while(1){ 메세지 처리; 화면의 이미지를 삭제; 이미지를 화면에 그릴 수 있도록 준비; 백그라운드에 그려놓은 내용을 포어그라운드에 반영; } |
와 같은 순으로 정리가 가능하다. 또한 이번 섹션에서의 예제에서는 sleep문이 포함되어있지 않다. 본래대로라면 엄청난 속도로 처리가 되면서 이미지가 움직여야 하지만 ScreenFlip함수는 모니터의 재생빈도에 맞추어 이미지처리를 하게되며 60Hz로 동작하는 모니터에서는 1/60초의 대기 시간을 갖게된다. 때문에 빠른속도로 이동하지 않고 적당한 속도로 이동하는 이미지를 확인 할 수 잇다.
즉, 위 예제에서는 한번의 루프에 x좌표가 2씩 증가하고 60Hz의 속도로 연산하게되면 1초에 x좌표는 120증가 하는 것을 알 수 있다. 이와같이 1초에 몇 프레임의 처리가 가능한가 하는 "프레임 레이트"를 통하여 이동속도를 유추하는게 가능하다. 일반적인 PC의 재생빈도는 60Hz이며 보통 게임을 제작할 때에도 60FPS라는 전제하에 제작하게 된다.
'DX라이브러리' 카테고리의 다른 글
1.9 게임 프로그램 골격의 완성 (0) | 2014.12.22 |
---|---|
1.8 소스코드를 간단하게 줄이자 (0) | 2014.12.22 |
1.6 백그라운드 처리 없이 이미지 움직이기 (0) | 2014.12.22 |
1.5 특정 키 입력상태를 감지 (0) | 2014.12.19 |
1.4 이미지를 메모리로 호출하여 표시 (0) | 2014.12.19 |