DX라이브러리2014. 12. 22. 14:34

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;


일단 예제가 간단해지기 위해 세세한 처리는 생략하였지만 이후 직접 게임을 제작하게 될 때에는 이 예제와 같이 세세하게 에러를 체크해주는 편이 좋다.

Posted by 캡슐리어