일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 이브뉴스24
- 유루캠
- inputsystem
- UI
- 오브젝트이동
- This is EVE
- C언어
- 게임제작
- 스카이트래커
- 포크스푼
- 이브
- 온라인
- 번역
- 리눅스
- 킥스타터
- 오픈스택
- 천체사진
- coroutine
- 이브온라인
- 점상
- 언성스토리
- 미니적도의
- 라즈베리파이
- 데포르메
- DX라이브러리
- 유니티
- 미타니
- 드론
- 자율비행
- centos
- Today
- Total
게임개발 예제모음
1.8 소스코드를 간단하게 줄이자 본문
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 |