
안녕하세요.
일단 저는 항상 이 게임 만들뗴 강좌를 보고 만들었는데
지금은 아니에요. 먼저 원리를 이해하면 다~ 발견하며 쉬워지니까요. 그게 장점이에요!
문제는 너무 빨리 만든다는 거에요.
이번엔 바운스 게임을 한번 만들어 봅시다.(▲바운스 게임)
character
먼저 게임을 만들기 전에 어떤식으로 움직이고, 어떻게 맵을 배치하고,어떻게 게임을 진행할 것인지를 미리 구상해보는 것이 좋아요..일반 플랫폼과 비슷하지만, 다르다면 계속 점프를 하는 것이겠지요.그에 대한 설정을 해봅시다.
먼저 블럭을 구성해야겠지요.그것에 따른 스프라이트 이미지(spr_block)를 마련합니다.(▲블럭 이미지)
이제 오브젝트를 만들어야겠지요.관리하기 편하도록 parent오브젝트를 만들고, 실제 배치시킬 블럭 오브젝트를 만듭니다.
예) obj_block(parent오브젝트) - obj_bl32(하위 오브젝트)(▲블럭 오브젝트)블럭 오브젝트에 스프라이트를 지정하고, parent를 지정, 그리고 solid를 체크합니다.그러면 블럭은 완성! 오옷
◈플레이어(obj_player)먼저 플레이어의 이미지(spr_player)를 구성합니다.(▲플레이어 이미지)이미지의 중심점을 가운데로 맞추고, Modify Mask를 눌러 마스크를 적당하게 설정합니다.그리고 플레이어 오브젝트(obj_player)를 만들어 스프라이트를 지정합니다
.
(▲플레이어 오브젝트)
이제 중력 설정을 할 차례입니다.이전 강좌에서 한번 해보셨죠.넵! 이미 해보셨다면 그리 어렵지 않을 것입니다.Step이벤트를 추가하고, 중력 설정에 대한 이벤트를 작성합시다.
★obj_player - Step 이벤트
if place_free(x,y+1) {gravity=0.4;gravity_direction=270;}
else{gravity=0;gravity_direction=270;}
if vspeed>8{vspeed=8;}
다음은 블럭과의 충돌 이벤트를 추가합니다. 충돌 이벤트는 블럭의 parent를 대표로 지정하면 됩니다
vspeed=0;
move_contact_solid(270,8);
이렇게 하면 플레이어가 블럭에 닿으면 완전히 멈추게 됩니다.하지만 플레이어는 계속 튕기는 모션을 주어야 겠지요.블럭과의 충돌 이벤트에 추가적으로 작성합니다.
if vspeed>0{
//------------------------▲ 추가
vspeed=0;
move_contact_solid(270,8);
//------------------------▼ 추가
vspeed=-8;
}
else{
vspeed=0;
move_contact_solid(90,8);
}
이제 플레이어가 블럭에 닿으면 멈추었다가 다시 점프를 하게 됩니다.그리고 만약 위에 블럭이 닿게 되면 플레이어는 멈추게 되고, 중력 방햐으로 다시 내려오게 됩니다.다음은 이동에 대해 설정합시다.플레이어의 Step이벤트에 이어서 작성합니다.
spd=3;
if keyboard_check(vk_left){x-=spd*place_free(x-spd,y);}
if keyboard_check(vk_right){x+=spd*place_free(x+spd,y);}
keyboard_check는 키 이벤트입니다.따라서 방향키를 누르게 되면 플레이어는 이동하게 됩니다.만약 이동 방향에 Solid로 체크된 오브젝트가 있다면 멈추게 되지요.※참고:
키보드 이벤트의 키코드
vk_left : 왼쪽 방향키
vk_right : 오른쪽 방향키
vk_up : 위쪽 방향키
vk_down: 아래쪽 방향키
vk_space : 스페이스 키
vk_alt : 알트키
vk_control : 컨트롤키
vk_escape : ESC키
vk_enter : 엔터키
ord("키") : 문자키를 사용할 때. 문자는 대문자. 예) ord("A") 이외에 코드 입력시 vk_를 입력하면 자동완성으로 여러가지 키코드들을 보실수 있어요.
다음은 룸 밖으로 나갔을 때 상황을 작성해봅시다.룸 밖으로. 그러니까 화면에 나가 플레이을 더 이상 할 수 없을때는 플레이어를 파기해야겠지요.그리고 게임을 재시작해야합니다.이것에 대한 이벤트를 작성해봅시다.먼저 Create이벤트를 추가하고 게임을 재시작에 대해 필요한 변수를 만듭니다.
restart=0;
다음은 End Step이벤트를 추가하고, 플레이어가 화면을 벗어났을 때 이벤트를 작성해봅시다.
if y>room_height+16{restart=1;instance_destroy();}
이것은 플레이어가 룸의 맨아래에 넘어갔을 때, 플레이어 자신을 파기하게 됩니다.그리고 게임 재시작 스위치(restart변수)를 1로 만들지요.
게임을 재시작하기 전에 약간의 지연시간이 있으면 좋겠지요.일단 게임을 재시작할때 지연 시간을 줄 오브젝트(obj_restart)를 하나 만듭니다.
게임메이커 1. 간단한 게임을 만들자!







지연시간은 알람이벤트를 이용하도록 해요.먼저 Create이벤트를 추가하고, 사용할 알람 이벤트를 지정합니다.여기에선 Alarm 0 이벤트를 사용하도록 하지요.
. alarm[0]=120
알람 지정은 룸 속도에 맞추면 됩니다. 예를 들어 룸 속도가 60일때 알람 120은 약 2초가 됩니다(1초=룸 속도).다음은 알람 이벤트(Alarm 0)를 추가하고, 룸을 재시작하면 됩니다.
room_restart();
이렇게 하면 현재 스테이지만 재시작하게 됩니다.※참고로 game_restart()함수가 있는데 이것은 게임을 처음부터 재시작하게 됩니다.이제 이것을 플레이어 오브젝트의 Destroy이벤트에 삽입하면 됩니다.플레이어 오브젝트로 이동해서 Destroy이벤트를 추가하고 룸 재시작 이벤트를 작성하도록 합니다.
if restart=1{instance_create(0,0,obj_restart);}
그냥 재시작 오브젝트를 생성해도 되는데, 왜 restart변수로 체크하게 했을 까요?그것은 플레이어가 어떠한 상황에 따라 게임을 재시작 할수도 있고 그냥 파기만 시킬 수도 있는 상황이 있을 수도있기 때문입니다. 이 Destroy이벤트는 파기 될때마다 항상 일어나는 이벤트이기 때문에, 상황에 따라프로그래머가 직접 체크하게해야 합니다.이제 룸을 만들고 플레이어 오브젝트와 블럭 오브젝트를 배치한 다음 제대로 되는지 테스트 해봅시다.잘 되는지 모르겠네요.다음은 트랩을 설치해볼까요.
Trap
먼저 이미지를 구성하도록 합니다.(▲트랩 이미지)다음은 오브젝트를 하나 만들고(obj_trap), 스프라이트를 지정합니다.(▲트랩 오브젝트)다양한 트랩을 만들고자 한다면 parent용 오브젝트를 먼저 만들고, 하위 오브젝트들을 만드세요.강좌에선 1개만 사용하기 때문에 그냥 하나만 만들도록 하겠습니다. 헤헤!이제 플레이어 오브젝트에서 이 오브젝트들과의 충돌 이벤트를 작성해야합니다.플레이어 오브젝트로 이동해서 트랩 오브젝트와의 충돌 이벤트를 추가합니다.트랩 오브젝트가 parent가 있는 경우 parent오브젝트를 지정하면 됩니다
restart=1;
instance_destroy();
이렇게 하면 룸 재시작 변수를 1로 만들고, 플레이어는 파기됩니다. 그러면 약간의 지연 시간후 스테이지를 재시작 하게 되겠지요. 굳!하지만 그냥 파기되면 좀 밋밋하겠지요. 간단한 이펙트라도 생성해보도록 합시다.
간단한 이펙트는 프로에서만 가능***
이렇게 8방향으로 이동하면서 점점 투명해져 없어지는 이펙트를 만들어 봅시다.
먼저 간단하게 흰색 원 이미지를 마련합니다.
그리고 중심점을 가운데 맞춰줍니다.이펙트로 사용할 오브젝트를 하나 만들고, 스프라이트를 지정합니다.
Create 이벤트를 추가하고 필요한 변수를 선언합니다.
★obj_effect - Create 이벤트:
alp=1;
fade_spd=0.05;
sca=1;
★obj_effect - Draw 이벤트
draw_sprite_ext(sprite_index,0,x,y,sca,sca,0,c_white,alp);
이제 투명도를 조절해야겠지요. Step이벤트를 추가하고, 투명도를 조절하는 이벤트를 작성해봅시다.
★obj_effect - Step 이벤트
if alp>0{alp-=fade_spd;sca-=0.02;}else{instance_destroy();}
호옹~ 간단하죠?투명도가 0이 될때까지 감소시키고, 이미지의 크기도 조금씩 축소시키며, 투명도가 0이하의 값이 되면 오브젝트를파기시키는 것입니다. 어차피 투명도가 0이면 보이지 않기 때문에 필요가 없어지죠.이제 이 이펙트를 플레이어 오브젝트의 Destroy이벤트에서 생성시키면 됩니다.플레이어 오브젝트(obj_player)로 이동해서, 이펙트를 생성하도록 합시다.Destroy이벤트에 이어서 작성하도록 합니다
. ★obj_effect - Destroy 이벤트
i=0;repeat(8)
{ it=instance_create(x,y,obj_effect);
it.direction=i;
it.speed=3;
it.friction=0.2;
i+=360/8; }
이제 플레이어가 파기되면 이펙트를 발생시킬 것입니다. 굳! 테스트 해봅시다.
점프 블럭
이번엔 점프 블럭을 만들어 봅시다.점프블럭은 좀 더 높이 뛰어야 겠지요.일단 스프라이트 이미지를 구성합니다. 다음은 오브젝트를 만들고, 스프라이트를 지정합니다. 그리고 Solid를 체크하도록 합니다.이제 점프 블럭은 완성되었습니다.하지만 플레이어의 설정이 남았지요.다시 플레이어 오브젝트(obj_player)로 이동해서, 점프 블럭과의 충돌 이벤트를 추가하도록 합니다.
★obj_player - obj_jump와의 충돌 이벤트
if vspeed>0{
vspeed=0;
move_contact_solid(270,8);
vspeed=-12;
}
else{
vspeed=0;
move_contact_solid(90,8);
}
룸 속도는 60이 적당
여기까지!강좌가 재밌있으셨는지 모르겠네요. 헤헤~어째든 바운스 게임은 만들기 쉬운편에 속하기 때문에 천천히 따라해보시면 금방 이해하실것이라 생각합니다.재미있는 게임 만드세요~!
