프로그래밍 강의/게임메이커 스튜디오 (35)
게임을 만들다 보면 이벤트 순서를 고려해야 하는 때가 있습니다. 게임메이커: 스튜디오(GameMaker: Studio)에서의 일반적인 이벤트는 이벤트 순서가 정해져 있으며, 이 강좌에서는 그 순서를 살펴볼 것입니다. * 이벤트 순서는 언제든지 바뀔 수가 있습니다. 게임메이커: 스튜디오의 도움말 파일에서, 'Using GameMaker: Studio' -> 'Events' 항목에 최신 이벤트 순서가 작성되어 있습니다. ㅁ 룸이 시작되었을 때 1. Create Event (각 인스턴스의) 2. Creation Code (룸에서 작성된 인스턴스의) 3. Game Start Event (이 이벤트는 게임의 가장 첫 번째 룸에서만 발생합니다.) 4. Room Creation Code 5. Room Start Ev..
이번 강좌에서는, GML(GameMaker Language)의 쓸데없는 기능(?) 중 파스칼 스타일식 코딩에 대해 알아보도록 하겠습니다. GML이라는 것을 찬찬히 살펴보면 파스칼이라는 프로그래밍 문법과 매우 닮았다는 것을 알 수가 있는데요, 실제로 몇몇 파스칼 문법들을 GML에서도 쓸 수가 있습니다. 1. {} 괄호 대신 begin, end를 사용할 수도 있습니다. 파스칼 문법에서는, 괄호를 begin, end로 처리합니다. 위 사진처럼 이것을 게임메이커에서도 그대로 쓸 수도 있고, if~then~begin~end로 then까지 넣어서 정식 파스칼 문법으로 처리할 수도 있습니다. 2. 최상위 {} 괄호 아래에 무언가를 더 쓰면 오류가 납니다. 사실 최상위 괄호를 쓸 필요는 없지만... 최상위 {} 괄호 ..
언뜻 보면 상당히 닮아 보이는 게임메이커: 스튜디오(GameMaker: Studio)의 두 가지 변수 선언방법인 var과 globalvar. 이번 강좌에서는 이 둘이 각각 어떨 때 쓰이며 어떤 특징이 있는지 살펴보겠습니다. 1. var 위 코드는 오브젝트를 누르면 랜덤한 숫자를 select라는 변수에 할당하는 코드입니다. 하지만 만약 select라는 변수가 오직 저 Left Released 이벤트에서만 사용된다면 메모리의 낭비겠지요? 이럴 때 select 변수를 var로 선언한다면, 여러분은 메모리를 아낄 수가 있습니다. 왜냐면 var은 어떤 이벤트 혹은 스크립트에서만 유지되는 변수이기 때문이죠. 이렇게 var을 사용하게 되면 일반적으로 선언되는 인스턴스의 변수와는 달리 일회성이 있으므로 깔끔함을 유지할..
네트워킹 완전정복 3개의 강좌를 했었지만, 그럼에도 많은 분들이 '좌표 공유 방법을 모르겠어요!' 혹은 '총알은 어떻게 발사하나요?' 라고 질문들을 하셔서, 게임메이커: 스튜디오(GameMaker: Studio)에서 기본적으로 지원하는 데모 파일을 가지고 설명을 해볼까 합니다. 제가 이 데모 파일에서 설명할 것은 좌표 공유에 관한 이야기입니다. 서버와 클라이언트의 개체에 대한 처리 방법은 '실체, 허상, 부분 동기화' 등 여러 가지가 있는데, 그중에서 겜스 네트워킹 예제는 '허상'이라는 방법을 사용합니다. 허상이란, 서버는 모든 개체의 실체를 가지고 있고, 클라이언트는 개체에 대한 허상만 가지고 있는 처리 방법입니다. 허상의 전제는 다음과 같습니다. 1. 서버는 자신과 모든 클라이언트의 oPlayer 라..
일반적으로 텍스트를 드로우 하게 되면, 글자는 수평으로는 왼쪽정렬과 수직으로는 상단정렬로 그려집니다. 하지만 수평으로는 중앙정렬로 그려지길 원하시는 분들도 있으실 테고, 수직으로는 하단정렬로 그려지길 원하시는 분들도 계실 수가 있습니다. 이런 분들은, 게임메이커: 스튜디오(GameMaker: Studio)에서 제공하는 아래와 같은 함수 두 가지를 이용하여 텍스트의 정렬을 조작할 수 있습니다. draw_set_halign(halign) fa_left fa_center fa_right draw_set_valign(valign) fa_top fa_middle fa_bottom 각 함수의 초깃값은, draw_set_halign 의 경우는 fa_left 이며, draw_set_valign 의 경우는 fa_top ..
RPG, RTS, AOS 등 게임의 장르를 가리지 않고 게임에 흔하게 나타나는 것이 바로 체력 바(Healthbar, Gaugebar)입니다. 대부분의 초보 분들은 체력 바를 만들지 못해서 변수를 숫자로만 드로윙하는 경우가 많습니다. 하지만 체력 바는 게임메이커: 스튜디오(GameMaker: Studio)에서 기본적으로 지원하는 기능이므로, 여러분들은 별다른 계산 없이 체력 바를 만들 수가 있습니다. 체력 바와 디자인을 비교하기 위해 HP를 숫자로 표현해보았습니다. 아무리 봐도 보기가 불편하지요? 이제 겜스가 지원하는 예쁜 체력 바를 넣어봅시다. 체력 바는 draw_healthbar 라는 함수를 통해 구현하실 수가 있습니다. 겜스 도움말을 보시면 아시겠지만, 이 함수의 인자들은 요런 구성으로 되어있는데요..
with 문은 어떤 오브젝트 혹은 id에게 특정한 명령을 내릴 때에 사용됩니다. 오브젝트에게 명령을 내릴 경우, 그 오브젝트에 해당하는 모든 인스턴스가 명령을 처리하게 됩니다. 반면에 id에게 명령을 내릴 경우, 어차피 id라는 존재는 하나의 인스턴스이니까 그 인스턴스만 명령을 처리하게 됩니다. other 이라는 놈은, 보통 충돌(Collision)이벤트에서 충돌한 대상인 인스턴스의 id를 지칭하는 시스템 변수입니다. 이런 other은 위 사진처럼 사실 with 문에서도 사용이 가능합니다. 음. 그러니까 obj_char이 with(obj_enemy){} 이라는 코드를 수행했을 때 with에게 other이라는 존재는 obj_char입니다. 물론, 여기에서 말하는 obj_char은 with를 호출한 하나의 ..
이번 강좌에서는 흔히 쓰면서도 개념을 알 듯 모를 듯한 게임메이커의 드로우 이벤트에 대해서 알아보겠습니다. 어찌 보면 가장 기초적인 개념이면서도 가장 심화적인 부분이 바로 이 드로우 이벤트입니다. 1. 인스턴스가 사라져요 드로우 이벤트를 사용하게 되면 인스턴스가 사라지게(?) 됩니다. 이렇게 되는 이유는 드로우 이벤트를 사용하기 전에는 게임메이커에서 자체적으로 인스턴스의 스프라이트를 그리지만, 드로우 이벤트를 사용하게 되면 게임메이커에서 인스턴스의 스프라이트를 그리지 않기 때문입니다. 사라짐 문제의 해결 방법은 draw_self() 함수를 사용하는 것입니다. 이 함수는 draw_sprite_ext(sprite_index, image_index, x, y, image_xscale, image_yscale,..
증가 연산자와 감소 연산자는 1을 더하거나 빼는 단순한 역할만을 합니다. 증가 연산자는 "var++, ++var"을 사용하며, 감소 연산자는 "var--, --var"을 사용하지요. 단순히 1을 더하거나 빼는 역할만을 하는 이 기능을 왜 만든 것일까요? C언어와 같은 컴파일러에서는 프로그램의 약간의 속도 향상에 있었습니다. 하지만 게임메이커: 스튜디오(GameMaker: Studio)는 인터프리터형식입니다. 그렇다면 이 기능은 필요 없지 않을까요? 그렇다면 위와 같은 코드를 살펴봅시다. 사진에서는 증가 연산자가 draw_text 함수 안에 있습니다. 원래 위의 코드는 증가 연산자를 사용하지 않았다면, draw_text(0, i*16, count) count+=1 이렇게 써졌어야 했을 코드입니다. 이것으로..
대부분의 프로그래밍 컴파일러가 그러하듯, 게임메이커: 스튜디오(GameMaker: Studio)에서도 배열은 2차원까지만 지원합니다. 하지만 여러분들이 어느 날 갑자기 꼭 n차원 배열을 사용해야 하는 때가 온다면 어떻게 해야 할까요? 이 강좌에서는 n차원 배열을 구현할 수 있는 여러 가지 방법 중 한 가지 방법을 제시하고자 합니다. 위 그림은 멍멍이(qw5628)님의 3차원 배열이 [N1, N2, N3] 일 때, [5, 4, 3] 이라는 크기를 가진 배열의 주소를 설명하는 사진입니다. 이 강좌에서는 N을 배열 크기로, n을 배열에 삽입하는 숫자라고 정의하겠습니다. [N1, N2] 에서 [5, 4] 가 배열의 크기일 때, [0, 0] 의 주소는 0 이고, [0, 3] 의 주소가 3 이라면, [1, 0] 의..