DX라이브러리2014. 12. 24. 12:09

3.1 키 입력에 대응해서 캐릭터를 움직여보자


기본적인 처리방식은


if( 방향키"상"이 입력되었다. ){

  캐릭터를 위로 움직인다.;

}


를 기본 구조로 하여 상,하,좌,우 모두 처리해주면 되겠다.


사용예제


#include <DxLib.h>


int Key[256];


int gpUpdateKey(){

char tmpKey[256];

GetHitKeyStateAll( tmpKey );

for( int i=0; i<256; i++ ){ 

if( tmpKey[i] != 0 ){

Key[i]++;

} else {

Key[i] = 0;

}

}

return 0;

}


int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){

        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );


        int x=320, y=240;

        int Handle = LoadGraph("image/character_01.png");


        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){


                if( Key[ KEY_INPUT_RIGHT ] >= 1 ){ // "우" 입력

x++;                       // 오른쪽 이동

}

if( Key[ KEY_INPUT_DOWN  ] >= 1 ){ // "하" 입력

y++;                       // 아래 이동

}

if( Key[ KEY_INPUT_LEFT  ] >= 1 ){ // "좌" 입력

x--;                       // 왼쪽 이동

}

if( Key[ KEY_INPUT_UP    ] >= 1 ){ // "상" 입력

y--;                       // 위로 이동

}


DrawRotaGraph( x, y, 1.0, 0.0, Handle, TRUE );


}


DxLib_End();

return 0;

}


실행결과




이와같이 게임프로그램은 계산부분과 묘화부분으로 구분 가능하다.



계산 구문에서 캐릭터의 좌표등을 계산하고 묘화 구문에서 계산이 완료된 좌표에 따라 이미지를 처리하는 것이 일반적이다. 게임을 제작하다보면 계산부분만 스킵한다던가 반대로 묘화부분만 스킵하는 경우가 있기 때문에 이부분은 다음 예제와 같이 명확하게 구분 지을 필요가 있다.


#include <DxLib.h>


int Key[256];


int gpUpdateKey(){

char tmpKey[256];

GetHitKeyStateAll( tmpKey );

for( int i=0; i<256; i++ ){ 

if( tmpKey[i] != 0 ){

Key[i]++;

} else {

Key[i] = 0;

}

}

return 0;

}


int x=320, y=240;

int Handle;


void gpCalc(){    //좌표 계산을 위한 별도 함수

if( Key[ KEY_INPUT_RIGHT ] >= 1 ){

x++;

}

if( Key[ KEY_INPUT_DOWN  ] >= 1 ){

y++;

}

if( Key[ KEY_INPUT_LEFT  ] >= 1 ){

x--;

}

if( Key[ KEY_INPUT_UP    ] >= 1 ){

y--;

}

}


void gpDraw(){ // 이미지 묘화를 위한 별도 함수

        DrawRotaGraph( x, y, 1.0, 0.0, Handle, TRUE );

}


int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){

        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );


        Handle = LoadGraph("image/character_01.png");


        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){


                gpCalc();


                gpDraw();


}


DxLib_End();

return 0;

}


실행결과는 위의 예제와 동일하다.

'DX라이브러리' 카테고리의 다른 글

3.3 간단한 선택화면  (0) 2014.12.24
3.2 나눗셈 나머지를 이용한 루프  (0) 2014.12.24
2.9 키 입력  (0) 2014.12.23
2.8 이미지를 분할하여 로드  (0) 2014.12.23
2.7 효과음 재생  (0) 2014.12.23
Posted by 캡슐리어