1.8 소스코드를 간단하게 줄이자
루프 문장의 작동 순서는 다음과 같다.
while(1){ 메세지 처리; 화면의 이미지를 삭제; 이미지를 화면에 그릴 수 있도록 준비; 백그라운드에 그려놓은 내용을 포어그라운드에 반영; } |
이 중 붉게 표시된 부분 이외에는 매번 반드시 진행되어야 한다. 루프 구문마다 매번 이 코드를 작성하게 된다면 소스코드가 매우 길어질 수 있기 때문에 간단하게 줄여 쓰도록 한다.
Before
#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; } |
After
#include <DxLib.h> int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //윈도우모두, DX라이브러리 초기화, 백그라운드 처리 int x = 0; int Handle; Handle = LoadGraph( "image/character_01.png" ); // while(이미지 반영, 메세지 처리, 화면 클리어) while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){ DrawGraph( x, 100, Handle, TRUE ); x = x + 2; }
DxLib_End(); return 0; } |
while의 조건문에서 호출된 함수들은 공통적으로 에러 발생시 0이외의 값을 반환한다. 때문에 위와 같은 방법으로 코딩 가능하다. 즉, 다음과 같은 코딩이 가능하다.
초기화 처리; while(1프레임당 반드시 한번 진행해야 하는 처리){ 내용; } 종료처리; |
단, DX라이브러리의 초기화 함수는 반환값이 보이질 않기 때문에 에러가 발생한다고 해도 별다른 변화가 없다. 원래대로라면 아래의 예제와 같이 함수별로 하나하나 반환값이 정상인지 체크하여하 하며 이상 발생시 종료하도록 하는것이 제일 좋다.
#include <DxLib.h> int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ if( ChangeWindowMode(TRUE) != 0 ){ return 0; } if( DxLib_Init() != 0 ){ return 0; } if( SetDrawScreen( DX_SCREEN_BACK ) != 0 ){ DxLib_End(); return 0; } int x = 0; int Handle; Handle = LoadGraph( "image/character_01.png" ); while( 1 ){ if( ScreenFlip() != 0 ){ break; } if( ProcessMessage() != 0 ){ break; } if( ClearDrawScreen() != 0 ){ break; } DrawGraph( x, 100, Handle, TRUE ); x = x + 2; } DxLib_End(); return 0; } |
일단 예제가 간단해지기 위해 세세한 처리는 생략하였지만 이후 직접 게임을 제작하게 될 때에는 이 예제와 같이 세세하게 에러를 체크해주는 편이 좋다.
'DX라이브러리' 카테고리의 다른 글
2.1 이미지 처리 : 응용편 (0) | 2014.12.22 |
---|---|
1.9 게임 프로그램 골격의 완성 (0) | 2014.12.22 |
1.7 백그라운드처리를 통한 이미지 움직이기 (0) | 2014.12.22 |
1.6 백그라운드 처리 없이 이미지 움직이기 (0) | 2014.12.22 |
1.5 특정 키 입력상태를 감지 (0) | 2014.12.19 |