프로그래밍 강의/게임메이커 스튜디오 (35)
게임메이커: 스튜디오(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 함수를 이용하면 됩니다. 저는 위와 ..