인디 게임 강좌

전체보기

모바일 상단 메뉴

본문 페이지

[게임메이커] 처음 만나는 GMS2 // 5. GML - 함수, 스크립트

Zpink
조회: 3476
추천: 1
2017-07-03 18:36:24



1. 함수 사용해보기

2. 함수의 리턴값

3. 스크립트




변수, 조건문등을 모두 사용해보았습니다. 그러나 게임을 만들기 위해 필요한 것은 아직 남아있습니다. 우리가 변수의 값을 확인해보기 위해 빈번하게 사용하였던 draw_text(x,y,str) 의 정체가 무엇이었을까요? 바로 함수(function)입니다. 




1. 함수 사용해보기 


함수는 특정 인자(argument)를 입력하여 그에 따른 결과를 얻어낼 때 사용하는 코드입니다. 함수는 다음과 같은 구조를 취하고 있습니다.


함수(인자1, 인자2...);


괄호 안에 있는 인자에 값을 입력하면 값을 토대로 함수의 기능이 실행됩니다. 인자의 갯수는 함수마다 모두 다릅니다. 1개~3개 정도가 있을 수도 있고, 혹은 아예 존재하지 않을 수도 있습니다.





우리는 새로운 함수 하나를 사용해볼 것입니다. 



 instance_create_layer(x,y,layer_id,object);




이 함수는 layer_id 레이어의 x,y의 위치에 object를 생성합니다.  여기서 다시 한 번 짚고 넘어가야 할 부분은 인스턴스와 오브젝트의 차이입니다. 우리가 이벤트를 추가하고 코드를 작성하며 만든 이것을 '오브젝트'라고 한다면, 그것이 룸에 삽입된 형태는 '인스턴스' 로 부릅니다. 이것을 도장에 비유해보자면, 스프라이트 (Sprite)는 도장의 디자인, 오브젝트는 도장 몸통, 그리고 인스턴스는 도장으로 찍어낸 자국이라고 보실 수 있겠습니다. 



 

instance_create_layer(0,0,"Instances",objText2);




이 함수는 Instances 레이어의 (0,0) 위치에 objText2 오브젝트를 생성합니다. Instances 레이어는 룸을 생성하면 기본적으로 같이 만들어지는 레이어의 이름입니다.









room0의 레이어. 이름이 Instances인 이 레이어에 objText2를 생성할 것입니다.






objText2가 제대로 생성되었는지 확인하기 위해 objText2의 Draw 이벤트에 텍스트를 출력하는 코드를 입력합니다. 이 오브젝트가 생성된다면 0,0의 위치에 "Upgrade Complete"가 출력될 것입니다.







room0 에는 objText만을 삽입합니다. 






함수가 정상적으로 실행되었다면 objText2가 만들어진 후 Draw 이벤트의 코드가 작동되어 메시지가 출력될 것입니다. 




2. 함수의 리턴값




함수는 특별한 기능을 수행할 뿐만 아니라, 값을 받아낸 후에 그 값을 토대로 리턴(return) 값을 출력하기도 합니다. 이번에는 이 리턴값을 직접 확인해보도록 하겠습니다.


이번에 사용해볼 함수는 point_direction(x1,y1,x2,y2) 입니다. 이 함수는 (x1,y1)의 기준으로 (x2,y2)를 바라보았을 때 그 각도가 몇인가를 계산한 후 그 결과를 리턴합니다.




바로 이 각도입니다. 




var num = point_direction(48,48,96,96);

draw_text(0,0,string(num));




 좌표 (48,48)을 기준으로 좌표 (96,96)을 바라보았을 때 만들어지는 각도가 몇인지 로컬변수 num에 저장합니다. 그리고 그것을 draw_text를 이용해 출력해보겠습니다. 







값은 315가 나옵니다. 




3. 스크립트




그렇다면 이런 함수를 직접 만들수는 없을까요? 그래서 게임메이커 스튜디오에는 Scripts 기능이 있습니다. 이 스크립트를 직접 만들어보도록 하겠습니다. 왼쪽 화면의 Scripts 항목에 마우스 오른쪽 클릭한 후 Create를 클릭하여 새 스크립트를 생성합니다. 스크립트의 이름은 calculate 라고 짓겠습니다.







스크립트에는 3가지의 인자가 들어가도록 만들겠습니다, argument0, argument1, argument2 는 각각 계산 모드, 숫자1, 숫자2가 될 것입니다. argument0이 0인 경우에는 덧셈을 수행하고, 그렇지 않은 경우 뺄셈을 수행할 것입니다. 그리고 그 결과를 return 합니다. 


 





이렇게 저는 calculate(인자1,인자2,인자3) 이라는 새로운 스크립트를 만들었습니다. 인자1이 0이면 인자2와 인자3를 더한 값을 리턴하고, 그렇지 않으면 인자2와 인자3를 뺀 값을 리턴합니다. 그러면 이것이 잘 작동하는지 바로 사용해보도록 하겠습니다. 


objText의 Draw 이벤트에 다음과 같은 코드를 삽입합니다.


 

draw_text(0,0,calculate(0,1,2));

draw_text(0,24,calculate(1,4,2));




첫번째 줄은 (0,0) 위치에 1과 2를 더한 값을 출력해주고, 

두번째 줄은 (0,24) 위치에 4와 2를 뺀 값을 출력해줄 것입니다. 




결과를 확인해봅니다. 잘 작동하는군요!





 이렇게 GML에 대한 정보를 훑어보았습니다. 물론 여기있는 정보만으로도 어떻게든 게임은 만들어낼 수 있지만, 직접 사용해보며 어떠한 코드를 어느 때에 사용해야 하는지 알아보는 과정이 필요할 것입니다. 






GML의 다양한 함수는 help -> Manual을 통해 알아보실 수 있습니다. 매뉴얼에는 내장 변수 및 다양한 함수들의 목록이 종류별로 정리되어있으므로, 필요하실 때마다 참고하시면 좋습니다.


또한 예제를 참고하여 게임을 제작하실 경우, 예제에서 사용되는 코드가 어떠한 기능을 수행하는지 궁금할 수 있습니다. 이럴 때에는 마우스 가운데 버튼으로 해당 함수를 클릭하면 그 함수의 설명을 즉시 확인하실 수 있습니다. 해당 함수의 괄호에는 무엇이 들어가는지, 어떤 값을 리턴하는지 뿐만 아니라 사옹 예시까지도 나와있으므로 매뉴얼을 적극 이용해주시면 좋습니다.



다음에는 여태까지 설명하였던 내용을 토대로 간단한 게임 하나를 만들어보도록 하겠습니다.

Lv1 Zpink

모바일 게시판 하단버튼

댓글

새로고침
새로고침

모바일 게시판 하단버튼

지금 뜨는 인벤

더보기+

모바일 게시판 리스트

모바일 게시판 하단버튼

글쓰기

모바일 게시판 페이징