GameMaker (39)
게임메이커: 스튜디오(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 함수를 이용하면 됩니다. 저는 위와 ..
게임: http://o.playgm.co.kr/46 구 전설의 신화 2는 게임메이커 7의 파일이며, 기획 전설의 신화 2와 전설의 신화 2는 게임메이커 8 파일입니다. 또한, 기획 전설의 신화 2에 존재하는 구 전설의 신화 2는 70p 보다 버전이 높습니다. 구 버전의 전설의 신화와 기획 버전의 전설의 신화가 사실상 엔진이 더 우수합니다. 하지만 제작자가 엔진을 더 만들기를 귀찮아했기 때문에 전설의 신화 2는 많이 안 좋은 엔진을 사용했었습니다. 동토의 여명은 전설의 신화 2의 구 데모라고 할 수 있는 작품입니다. (전쟁의 서막으로 출시했었는데, 정식 명칭은 동토의 여명이었습니다) http://cafe.naver.com/playgm
게임: http://o.playgm.co.kr/40 게임메이커8 파일로 변환시켰습니다. 소스에서 박격포병이 안 나오는 이유는 소환, 소환2 오브젝트를 룸 상에 배치하지 않았기 때문입니다. http://cafe.naver.com/playgm
게임: http://o.playgm.co.kr/39 전설의 신화 소스 파일은 게임메이커7 버전으로 놔두었습니다. 왜냐하면, 전설의 신화의 맵 파일은 게임메이커의 기본 저장 기능을 사용하는데, 배포된 전설의 신화는 게임메이커7 버전으로 만들어졌으므로 게임메이커8 버전으로 만들어진 전설의 신화의 맵은 읽지 못하기 때문입니다. 그래서 이전의 맵을 즐기면서 패치 하시고 싶으시다면 게임메이커7 버전으로 만져주시고, 아무래도 상관없다 하시는 분은 게임메이커8 버전으로 열어주시면 됩니다. http://cafe.naver.com/playgm