프로그래밍 강의 (68)
스크립트는 단순히 코드만을 실행시키는 것이 아니라 인자도 받을 수가 있습니다. 이번 강좌에서는 인자를 받는 방법과 스크립트의 값을 외부로 반환하는 방법을 알아보겠습니다. 인자를 받는 방법은 간단합니다. argument* 변수를 사용하시면 되는데, 이 변수 또한 스크립트 상에서 독립된 변수입니다. 한마디로 argument* 변수를 수정했다고 해서 오브젝트의 변수가 바뀌지는 않습니다. 사진에서 보이는 return 이라는 명령어는 값을 외부로 반환해줍니다. 예를 들어 "a = script0()" 라고 했을 때, 변수 a로 return 한 값이 들어가게 됩니다. 이제 한번 스크립트를 테스트해봅시다. 오브젝트 코드에서 인자를 이렇게 넣고, 실행을 시켜보면. 짜잔! 값이 정상적으로 더해진 것을 보실 수가 있습니다...
게임메이커: 스튜디오(GameMaker: Studio)에는 Scripts 라는 리소스가 있습니다. 이것은 게임을 제작할 때에 어떤 역할을 해줄까요? 먼저 게임메이커에 내장된 기본 함수를 살펴봅시다. 위 사진처럼 함수들은 인자와 반환 값으로 이루어져 있습니다. name(인자1, 인자2, 인자3): 변수를 반환 이게 기본 베이스인데요, 저런 함수를 사용자가 직접 만들 수 있게 해주는 게 바로 스크립트입니다. - 그럼 스크립트는 왜 써야 할까요? 여러분이 a=0; b=0; c=0 과 같은 코드를 사용한다고 생각해봅시다. 이 코드를 오브젝트 100개에다가 적어놓았는데, 어느 날 생각해보니 c=0 을 d=0 으로 수정해야 할 일이 생겨버렸습니다. 어이쿠; 그럼 코드를 100번이나 수정해야 하지요? 하지만 스크립트..
게임메이커: 스튜디오(GameMaker: Studio)는 기본적인 데이터 구조체를 기본 함수로 지원합니다. 사용자는 이러한 데이터 구조체로 변수들을 보다 편하게 관리할 수가 있습니다. 현재 겜스에서 지원하는 데이터 구조체는 아래와 같습니다. List (리스트) Grid (그리드) Map (맵) Queue, Priority Queue (큐) Stack (스택) 이번 강좌에서는 1차원 배열이라고도 할 수 있는 List 와, 비동기 이벤트에서 자주 쓰이는 Map 에 대해서 알아보고자 합니다. 리스트의 기본적인 사용방법은 위와 같습니다. ds_list_add 를 사용하면 리스트의 인덱스가 그만큼 확보됩니다. 이제 ds_list_find_value 를 사용하면 해당 인덱스에 축적된 변수를 얻을 수가 있지요. 참고..
게임메이커: 스튜디오(GameMaker: Studio)의 배열은 여타 다른 언어의 배열과는 많이 다릅니다. 겜스의 배열은 자유도가 높고, 메모리 해제가 자유롭기 때문이죠. 사실 요즘 게임메이커의 추세는 배열을 사용하는 것이 아니라 구조체를 사용하는 것입니다. ds_list, ds_map 등등의 구조체가 사실 더 빠르고 합니다만, 배열은 간단히 사용할 때 쓰기가 좋습니다. 일단 겜스는 배열의 크기 설정이 자유롭습니다. 처음 변수를 선언할 때 배열의 크기를 무조건 정해야 하는 것이 아니라, 언제든 배열의 크기를 늘릴수가 있습니다. 그리고 배열의 메모리 해제 방법은 "배열 이름 = 0" 만 해 주시면 됩니다. 간단하지요? 배열의 길이를 얻는 함수도 제공합니다. array_length_1d 라는 함수는 1차원 ..
이번 포스트가 네트워킹 완전정복의 마지막 강좌입니다. 원래 마지막 강좌는 플레이어 오브젝트들의 좌표공유로 끝내려고 했지만, 현재 겜스에서 네트워킹 비동기이벤트에서 메시지를 보내면 패킷이 꼬여버리는 버그가 있어서 비슷한 강좌로 대체합니다. 이번 강좌에서 배우는 내용은 메시지를 보낸 플레이어가 누구인지를 식별하는 것입니다. 저번 강좌에서는 어떤 플레이어가 메시지를 보냈는지를 알 수가 없었습니다. 그 방법을 이번 강좌에서 배워보고자 합니다. 접속 부분입니다. 서버일 때 플레이어의 리스트를 관리하기 위해 map 구조체를 선언하고, chat 구조체는 서버의 로그를 관리하기 위해 만들었습니다. 클라이언트일 때에는 접속이 완료되면 자신의 닉네임을 서버에게 전달합니다. 이 닉네임을 서버에서 관리하게 되고, chat 로..
이번 강좌에서는 서버에서 클라이언트로, 클라이언트에서 서버로 메시지를 보내는 방법을 배워봅시다. 사실 지난번 강좌에서 클라이언트에서 서버로 메시지를 보내는 방법은 배웠었습니다. 지난번 강좌에 알람에서 서버의 생존체크를 하던 그 코드가 바로 메시지를 보내는 코드였는데, 이번에는 심화해서 배워볼 겁니다. 이번에 만드는 접속 코드는 지난번과는 조금 다릅니다. 일단 메시지를 보내는 버퍼는 서버일 때나 클라이언트일 때나 둘 다 생성하고요, 서버는 ds_list 로 플레이어들을 저장합니다. 왜 지난번처럼 ds_map 이 아닌 ds_list 로 처리하느냐면, 이 구조체가 클라이언트들에게 메시지를 보낼 때 가장 효율적이기 때문입니다. 메시지를 보낼 때에도 조건이 필요하겠죠? 키보드를 누를 때 메시지를 보내도록 해봅시다..
기존의 게임메이커와는 달리, 게임메이커 스튜디오(GameMaker: Studio)는 네트워킹 함수를 기본적으로 제공합니다. 하지만 도움말이 영어고, 함수가 너무 복잡한 감이 있어서 그런지 초보자에게는 그렇게까지 와 닿지는 않을 수가 있습니다. 그래서 이 강좌를 통해서 네트워킹 함수를 완벽히 정복하는 시간을 가져보고자 합니다. 네트워킹에서 가장 기본적인 부분은 접속과 접속해제입니다. 접속과 접속해제를 위해 서버는 플레이어들을 수용할 서버를 만들어야 하고, 클라이언트는 서버에 접속해야 합니다. 서버와 클라이언트를 만드는 방법은 다양합니다. 소스 파일을 따로 서버와 클라이언트로 나누던가 서버만들기 접속하기 버튼을 만들 수도 있지요. 그러나, 이 강좌에서는 한 오브젝트에서 서버와 클라이언트를 둘 다 처리할 것입..
게임메이커: 스튜디오(GameMaker: Studio)에서 콘솔에서 인자를 받아 명령을 실행하는 프로그램을 만들어봅시다. 이런 프로그램은 배치 파일(*.bat)을 이용할 수 있는 등 활용도가 넓습니다. 예로 대부분의 유틸리티는 콘솔프로그램 하나씩은 기본적으로 달고 다니죠. 오브젝트 하나를 만듭시다. 저는 sys_system 이라고 명칭 하였습니다. (왼쪽 리소스 폴더에서는 OK 를 누르기 전까지 이름이 반영되지 않습니다.) 조건은: Create, 해당 오브젝트의 인스턴스가 생성되었을 때. 액션은: 코드를 실행합니다. 콘솔로부터 인자를 받는 것은 간단합니다. 인자의 개수를 구하는 parameter_count 함수와, 인자의 문자열을 구하는 parameter_string 함수를 이용하면 됩니다. 저는 위와 ..
이 스크립트는 16진수 문자열을 10진수 실수로 변환해줍니다. 소문자 16진수 문자열도 지원하기를 원하시면 //num1=string_upper(num1) 의 주석을 제거해주시면 됩니다. 어렸을 때 만든 거라 최적화 부분이 잘 되어있는지는 모르겠네요. 스크립트 사용방법은, 변수 = 스크립트("A") 이런 식으로 사용하시면 됩니다. ///HEX to DEC: Real var num1, length, total, va1, i, j; num1=argument0 //num1=string_upper(num1) while(string_copy(num1, 1, 1)="0"){num1=string_delete(num1, 1, 1)} length=string_length(num1) total=0 for(i=0; i!=le..
이 스크립트는 10진수를 16진수로 변환하여 문자열로 반환해줍니다. 변환의 원리는 숫자를 16으로 나눈 뒤 pos를 구해서 hexlist에 있는 문자로 치환하는 방식입니다. 스크립트 사용 방법은, 변수 = 스크립트(10) 이렇게 하시면 됩니다. ///DRC to HEX: String var num1, decimal, hexpos, hexlist, sRevReturn, sReturn, i; hexlist = "0123456789ABCDEF" sRevReturn = "" sReturn = "" num1 = argument0 while(num1>0) { decimal = (num1/16) num1 = floor(decimal) hexpos = (decimal-num1)*16 sRevReturn+=string_..