본문 바로가기
GameMaker강좌[GMS2]/액션게임강좌

[게임메이커 강좌-액션][GMS2]봄버맨 만들기-3 : 몬스터 만들기

by 타락카얀 2022. 2. 3.
728x90

 

 

 

 

 

이번 강좌에서는 몬스터를 만들어 보도록 해요.

 

 

 

 

 

◈ 몬스터 만들기

 

 

플레이어와 마찬가지로 상하좌우 방향의 이미지를 준비합니다.

이미지의 크기는 그리드 크기(32x32)입니다.

 

(▲ 아래쪽 방향)

 

(▲ 왼쪽 방향)

 

(▲ 오른쪽 방향)

 

(▲ 위쪽 방향)

 

이미지가 준비되었으면 스프라이트 이미지로 추가해요.

 

(▲ 몬스터 이미지)

 

오브젝트를 만들 때, 벽 오브젝트와 마찬가지로 몬스터 오브젝트에 부모 오브젝트를 연결해줍니다.

 

(▲ 오브젝트 구성)

 

먼저 부모 오브젝트를 하나 만듭니다.

 

(▲ 몬스터 부모 오브젝트)

 

몬스터 오브젝트를 만들고, 준비한 몬스터 이미지를 지정합니다.

그리고 그리드 크기의 마스크 이미지를 지정한 후, 부모 오브젝트를 연결해줍니다.

 

(▲ 몬스터 부모 오브젝트)

 

[Create 이벤트]에 이동 속도를 정의합니다.

 



     ● obj_enemy_01 - Create 이벤트
     
     pspeed = 2;
     

 

다음은 몬스터의 이동 설정입니다.

룸에 배치되었을 때, 이동하도록 합니다.

강좌에서는 가로 방향 이동은 hspeed, 세로 방향 이동은 vspeed로 이동합니다.

 



     ● obj_enemy_01 - Create 이벤트
     
     randomize( );
     if choose( -1, 1 )<0{
     hspeed = choose( -pspeed, pspeed );
     }
     else{
     vspeed = choose( -pspeed, pspeed );
     }

 

[Step 이벤트]를 추가하고, 그리드 위치에 있을 때 랜덤 방향으로 이동하도록 구성합니다.

 



     ● obj_enemy_01 - Step 이벤트
     
     if place_snapped( 32, 32 ){ //그리드의 위치에 있을 때 이동
     randomize( );
     if ( hspeed == 0 ){
     if ( random( 3 )<1 && place_free( x-16, y ) ){ hspeed = -pspeed; vspeed = 0; }
     if ( random( 3 )<1 && place_free( x+16, y ) ){ hspeed = pspeed; vspeed = 0; }
     }
     else{
     if ( random( 3 )<1 && place_free( x, y-16 ) ){ hspeed = 0; vspeed = -pspeed; }
     if ( random( 3 )<1 && place_free( x, y+16 ) ){ hspeed = 0; vspeed = pspeed; }
     }
     }

 

이것은 그리드의 위치에 있을 때, 가로 또는 세로 방향으로 랜덤 이동시키도록 합니다.

 

플레이어와 마찬가지로 [Step 이벤트]에서 오브젝트의 깊이를 갱신하도록 설정합니다.

 



     ● obj_enemy_01 - Step 이벤트
     
     depth = -(y+32);

 

이동 방향이 결정되었으면, 방향에 따른 이미지를 갱신해주어야겠지요.

 



     ● obj_enemy_01 - Step 이벤트
     
     var dir;
     dir = ( round( direction*( 1/90 ) )*90 ) mod 360; //방향
     
     if dir == 0{ sprite_index = spr_enemy_01_right; } //오른쪽
     if dir == 90{ sprite_index = spr_enemy_01_up; } //위쪽
     if dir == 180{ sprite_index = spr_enemy_01_left; } //왼쪽
     if dir == 270{ sprite_index = spr_enemy_01_down; } //아래쪽
     
     image_speed = 0.2; //애니메이션 속도

 

몬스터가 벽에 부딪혔을 때는 이동을 반대방향으로 전환하도록 합니다.

 


     ● obj_enemy_01 - obj_block_parent 와의 충돌 이벤트
     
     hspeed * = -1;
     vspeed * = -1;

 

몬스터가 제대로 이동하는지 룸에 배치하고 테스트해 봅시다.

 

(▲ 룸에 배치)

 

 

(▲ 테스트)

 

 

 

 

bomberman_02.yyz
0.19MB

 

 

 

 

 

 

300x250

댓글