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


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



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