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

[게임메이커강좌-플랫폼]간단한 플랫폼게임 만들기-3-적 구성

by 타락카얀 2013. 5. 20.
728x90





이번엔 간단한 적을 만들어봅시다.







◈간단한 적만들기



먼저 적들의 parent로 사용할 오브젝트를 한개 만들고, 실질적으로 배치할 몬스터용 오브젝트를

또 한개 만듭니다.


obj_enemy : 모든 적들의 parent
obj_en1 : 실질적으로 배치할 몬스터



(▲슬라임)


일단 이 몬스터는 플레이어와 마찬가지로 중력을 받는 몬스터로 설정합시다.

중력 기본 설정은 이전 강좌에서 설정했던 플레이어와 같게하시면 됩니다.



(▲Create 이벤트-변수)


jump = 점프 변수. 1은 점프 중, 0은 점프 안했을 때
move = 이동 변수. 1은 이동, 0은 이동 안했을 때
xdir = 방향 -1은 왼쪽(180도), 1은 오른쪽(0도)방향
image_speed = 애니메이션 속도



(▲Step 이벤트-중력 설정)


(▲Block과의 충돌 이벤트-중력 설정)


Draw 이벤트 설정


     //점프 안했을때

     if jump=0{

     //이동중일때
     if move=1{
     draw_sprite_ext(sprite_index,-1,x,y,xdir,1,0,c_white,1);
     }

     //멈췄을때
     else{
     draw_sprite_ext(sprite_index,0,x,y,xdir,1,0,c_white,1);
     }
     }
     //점프 중일때
     else{
     draw_sprite_ext(sprite_index,0,x,y,xdir,1,0,c_white,1);
     }


기본적인 중력 설정이 끝났으니, 이제 몬스터가 좌우로 이동하게끔 행동을 설정해봅시다.
Step이벤트는 중력액션이 있으니 End Step이벤트에 작성해보도록 해요.



(▲이동 액션)


End Step이벤트를 추가하고, 조건문으로 이동중인지를 체크합니다.
control -> Variables -> Test Variable 액션을 삽입하고,


     variable : move
     value : 1
     operation : equal to


다음은 move -> Jump -> Jump to position액션을 삽입해, 몬스터를 이동시킵니다.


     x : 1*xdir
     y : 0
     [V]Relative


방향이 결정될 때마다 1의 속도로 이동하게 됩니다.
(여기서 속도는 xdir과 같지만 다른속도로 이동하게 하고 싶다면 1의 값을 변경해주면 됩니다.)

이동중일 때 블럭과 맞닿을 시 방향을 변경하는 것이 필요하겠지요.



(▲방향 전환 조건문)


먼저 블럭과의 충돌 이벤트로 이동해서, control -> Questions -> Check Empty액션을 삽입합니다.


     x : 1*xdir
     y : 0
     object : Only solid
     [V]Relative     [V]Not


이것은 Solid가 체크된 블럭이 이동방향이 있을 때 작동하게 하는 조건문입니다.



(▲방향 전환)


그리고 이어서  control -> Variables -> Set Variable 액션을 삽입하고 방향을 전환시킵니다.


     variable : xdir
     value : -1*xdir



(▲방향 전환)


그러면 이동방향에 블럭이 있을 때 방향을 전환하게 됩니다.
하지만 아래처럼 블럭이 없는 경우 이동을 계속하다 결국 아래로 떨어지겠지요.



(▲블럭이 없는 경우 이동하다 아래로 떨어짐)


이것을 방지하기 위해 아래의 그림처럼 가상 블럭을 배치해놓는 것이 좋습니다.
그러면 몬스터가 이동하다 아래와 같은 가상 블럭에 닿으면 자동으로 방향을 전환하게 되는 것이죠.



(▲가상블럭을 배치해 자동으로 방향을 전환 시킬 수 있음)


또한 이 블럭은 플레이어에 어떠한 방해를 받아서는 안되게 해야겠지요.

일단 이 가상블럭으로 쓸 오브젝트(obj_wall)를 하나 만듭시다.



(▲가상블럭 오브젝트)


보이지 않게 해야하니 Visible을 해제합니다.

다음은 슬라임 오브젝트로 가서 이 가상 블럭과의 충돌 이벤트를 추가합니다.



(▲방향전환)


그리고 이어서  control -> Variables -> Set Variable 액션을 삽입하고 방향을 전환시킵니다.


     variable : xdir
     value : -1*xdir


이제 모든 이동이 끝났습니다. 제대로 작동되는지 테스트해봅시다.



obj_enemy : 적들의 parent
obj_en1 : 슬라임
obj_wall : 방향전환용 가상블럭







◈몬스터와 플레이어의 충돌



다음은 몬스터가 플레이어와 만났을 때의 이벤트를 작성해봅시다.
플레이어 오브젝트로 이동해서 몬스터와의 충돌 이벤트를 추가합니다.



(▲몬스터와의 충돌 이벤트)


충돌이벤트는 적들의 parent오브젝트를 지정해줍니다.
이전 강좌에서 작성했던 트랩 이벤트와 같이 룸 재시작 이벤트를 실행하고, 플레이어를 파기하면

되겠지요.


main1 -> Objects ->Create Instance액션을 삽입하고 룸 재시작 오브젝트를 생성합니다.


     object : obj_restart
     x : 0
     y : 0


약간의 이펙트를 생성하면 좋겠지요. 이전에 만든 이펙트르 생성해봅시다.

main1 -> Objects ->Create Instance액션을 삽입하고 룸 재시작 오브젝트를 생성합니다.


     object : obj_ef_creator
     x : 0
     y : 0
     [V]Relative


그리고 main1 -> Objects ->Destroy Instance액션을 삽입하고, 필요없어진 플레이어를 파기하도록

합니다.



모든 설정이 끝났습니다. 이제 테스트를 해봅시다.







-------응용예제------



platform-3-액션.gmk


platform-3-액션.exe




300x250

댓글