[include(틀:상위 문서, top1=게임메이커)] [목차] 게임메이커/게임메이커: 스튜디오에서 오브젝트의 이벤트에 대하여 설명한다. [[https://docs.yoyogames.com/|게임메이커 도움말]]을 확인. == Create == * [[파일:external/gamemaker.info/event_create.gif]] 이런 아이콘을 가지고 있다. 인스턴스가 처음 생성 시 작동한다. 변수 초기화, 타임라인 시작, 패스(Path) 설정 등 이 인스턴스가 한 번만 수행해야 하는 일에 사용한다. 이 이벤트가 실행될 때는 '''인스턴스가 생성된 직후이다.''' 예를 들어 {{{foo}}}라는 오브젝트의 Create Event에 {{{hp = 80;}}}이라는 코드가 있고 {{{bar}}} 오브젝트에서 {{{instance_create(x, y, foo); foo.hp = 30;}}}이라는 코드를 실행한다면 {{{bar}}}의 {{{instance_create(x, y, foo);}}}, {{{foo}}}의 {{{hp = 80;}}}, {{{bar}}}의 {{{foo.hp = 30;}}}의 순서로 실행되어 {{{foo}}}의 {{{hp}}}는 80이 아니라 30이 된다. == Mouse == * [[파일:external/gamemaker.info/event_mouse.gif]] 이런 아이콘을 가지고 있다. 이 이벤트는 여러 하위 이벤트로 분리된다. iOS, 안드로이드에서 일반 터치는 좌클릭, 더블터치는 우클릭에 대응된다. 이 설정을 끄려면 게임 시작 시 {{{device_mouse_dbclick_enable(false)}}}를 실행시키면 된다. 참고로 이 이벤트로는 모바일(iOS, 안드로이드)에서는 첫번째 터치만을 인식한다. 즉 멀티터치를 이용하려면 device_mouse_* 계열 코드를 이용해야 한다(GMS). * '''Left/Right/Middle button''' 마우스가 오브젝트의 마스크 위에 올려진 채 누르고 있는 동안 계속 실행된다. 마우스를 누르거나 뗄 때, 혹은 연속으로 마우스를 클릭할 시에도 실행된다. * '''No button''' 마우스가 오브젝트의 마스크 위에 올려진 채 아무 버튼도 누르지 않으면 위와 같이 계속 실행된다. * '''Left/Right/Middle button pressed''' 마우스가 오브젝트의 마스크 위에 올려진 채 누르는 순간 한 번 실행된다. * '''Left/Right/Middle button released''' 마우스가 오브젝트의 마스크 위에 올려진 채 떼는 순간 한 번 실행된다. * '''Mouse enter/leave''' 마우스가 오브젝트의 마스크 위에 올라가거나 내려갈 때 한 번 실행된다. * '''Mouse wheel up/down''' 마우스가 오브젝트의 마스크 위에 올려진 채 마우스 휠을 굴릴 때 한 번 실행된다. * '''Global mouse''' 'Gloabl left/right/middle button', 'Gloabl left/right/middle pressed', 'Gloabl left/right/middle released' 등 9종류의 하위 이벤트로 나뉘어 있다. 해당 이벤트들은 마우스가 게임 룸 내에 있기만 하면 위와 비슷하게 작동한다. * '''Joystick 1/2''' (GM8) 구 버전 게임메이커에만 존재한다. 각각 'Left', 'Right', 'Up', 'Down', 'Button 1~8' 등 12종류의 하위 이벤트로 나뉘어 있다. == Destroy == * [[파일:external/gamemaker.info/event_destroy.gif]] 이런 아이콘을 가지고 있다. 윈도우 XP 시절의 휴지통 아이콘과 같다. 해당 인스턴스가 파괴될 때 작동한다. 적 오브젝트가 사망 시 점수 추가나 사망 이펙트를 적용하는 데 유용하다. 인스턴스를 삭제하는 코드나 액션({{{instance_destroy();}}} 등)을 사용할 때 실행된다. 룸이 바뀌거나 게임이 종료될 때는 실행되지 않는다.[*출처 [[https://cafe.naver.com/playgm/69477]]] == Other == * [[파일:external/gamemaker.info/event_other.gif]] 이런 아이콘을 가지고 있다. * '''Outside room''' 인스턴스의 스프라이트가 룸 밖으로 완전히 나가면 한 번 실행된다. 스프라이트가 없다면 x, y 좌표로 판정한다. 룸 밖으로 나간 총알을 제거하는 용도로 사용할 수 있다. * '''Intersect boundary''' 인스턴스의 스프라이트가 룸 가장자리에 닿거나 룸 밖으로 나갈 시 연속으로 실행된다. 위와 같이 스프라이트가 없다면 x, y 좌표로 판정한다. 공을 룸 밖으로 나가는 대신 '튕겨져' 돌아오게 하는 용도로 사용할 수 있다. * '''Views''' 'Outside view 0~7', 'Boundary view 0~7' 등 16종류의 하위 이벤트로 나뉘어 있으며 해당 뷰를 사용하고 있지 않다면 작동하지 않는다. 'Outside Room', 'Intersect Boundary'를 뷰를 대상으로 실행한 것과 같다. * '''Game start''' 특수한 이벤트로써 게임 시작시 한 번 실행된다. 해당 이벤트를 가진 오브젝트가 첫 룸에 배치되어 있어야 한다. 일반적으로 컨트롤러 오브젝트에 정의되며 전역 변수 초기화, 파일 읽기 등에 사용한다. 'Create' 이벤트보다 늦게 시작되는 것에 주의하자. * '''Game end''' 게임 종료 직전에 한 번 실행되며, 종료되기 전 해당 이벤트를 가진 오브젝트가 룸에 존재해야 한다. 일반적으로 데이터를 저장하기 위해 사용한다. HTML5 모듈을 이용하여 게임을 제작했을 때, 일부 브라우저의 경우 이 이벤트를 지원하지 않을 수 있다. * '''Room start''' 룸 시작 시 한 번 실행된다. Persistent가 체크된 룸에는 최초 입장 시에만 실행된다.[* Persistent가 체크된 룸은 다른 룸으로 가도 사라지지 않고 룸 상태를 유지하기 때문. 'Room end' 이벤트도 마찬가지 이유로 실행되지 않는다.] 'Create' 이벤트보다 늦게 실행되는 것에 주의. * '''Room end''' 룸 종료 시 한 번 실행된다. Persistent가 체크된 룸에서는 실행되지 않는다. 메모리 누수 방지를 위해 파티클 시스템 제거나 리소스 로드 등을 제거하는데 유용하게 쓰일 수 있다. * '''No more lives''' 기본적으로 제공하는 전역 변수 {{{lives}}}가 0 이하일 때마다 실행된다. 일반적으로 룸 종료, 재시작 용도로 사용한다. * '''No more health''' 기본적으로 제공하는 전역 변수 {{{health}}}가 0 이하일 때마다 실행된다. 일반적으로 {{{lives}}}를 감산하거나 룸 종료, 재시작 용도로 사용한다. * '''Animation end''' 스프라이트의 마지막 서브이미지까지 보여지고 첫 번째 서브이미지로 돌아갈 때, 즉 스프라이트의 애니메이션이 한 번 루프된 후 실행된다. * '''Animation update''' 게임메이커: 스튜디오에만 존재한다. 'skeletal animation'용으로 매 스텝마다 실행된다고 한다. * '''End of path''' 패스가 끝났을 때 실행된다. 타워 디펜스 타입의 게임 등에 중요한 요소로 사용된다. * '''Close button''' (GM8) 구 버전 게임메이커에만 존재한다. 게임 창의 X 버튼을 눌렀을 때 실행된다. * '''User defined''' 특수한 이벤트로써 게임메이커에서 스스로 실행되지 않으며, {{{event_user(n);}}} 코드로 호출할 수 있다. 스크립트 기능과 비슷하나 해당 오브젝트 내에서만 작동하며 스크립트보다 빠르다. 0부터 15까지 16종류를 사용할 수 있다. == Alarm == * [[파일:external/gamemaker.info/event_timer.gif]] 이런 아이콘을 가지고 있다. 알람을 설정하면 일정 시간 이후 해당 이벤트가 실행된다. 매 시간마다 무엇을 할 것인지 정하는데 매우 유용하다. 같은 주기로 몬스터를 소환하는 등으로 사용할 수 있다. 0부터 11까지 12종류를 사용할 수 있다. 내부적으로는 기본적으로 제공하는 전역 변수 {{{alarm[n]}}}으로 판정하며, 해당하는 알람 이벤트가 없다면 카운트다운되지 않는다. {{{alarm[n]}}}에는 남은 스텝 수가 저장되며, 0일 경우 이번 스텝에 알람이 울리고, 알람을 설정하지 않았다면 -1이 된다. == Draw == * [[파일:external/gamemaker.info/event_draw.gif]] 이런 아이콘을 가지고 있다. 여러 가지 하위 이벤트로 나뉜다. * 같은 종류의 Draw 이벤트가 있다면 Begin-일반-End 순으로 실행되고 * 같은 Draw 이벤트를 여러 인스턴스가 공유한다면 오브젝트의 {{{depth}}} 값이 낮은 순으로 위에 표시되며 * {{{depth}}} 값이 같다면 인스턴스의 id가 높은(나중에 생성된) 순으로 위에 표시된다. 일반 'Draw' 이벤트를 제외한 8종류의 하위 이벤트는 게임메이커: 스튜디오에서만 사용할 수 있다. * '''Draw''' 'Draw', 'Draw Begin/End'(GMS)의 3가지로 나뉘어 있으며, 게임에 스프라이트, 텍스트 등을 그릴 때 사용된다. 이 이벤트들의 유무에 따라 자신의 스프라이트만 드로우하는 'default draw' 모드와 직접 {{{draw_*}}} 계열 코드나 액션을 사용하여 드로우하는 'custom draw' 모드로 나뉜다. 'custom draw'모드에서는 자신의 스프라이트도 드로우되지 않으므로 {{{draw_self();}}} 등을 이용해 따로 드로우해야 한다. 또, 이 이벤트는 {{{draw_*}}} 계열 코드를 뷰 하나하나마다 실행해야 하기 때문에 활성화된 뷰의 수만큼 실행된다. * '''Draw GUI''' (GMS) 'Draw GUI', 'Draw GUI Begin/End'의 3가지로 나뉘어 있으며, 뷰 위치나 크기, 회전에 상관없이 화면에 바로 드로우된다. 즉, 게임 창을 기준으로 드로우된다. 이 때문에 뷰 기준으로 드로우하는 좌표 {{{view_xview + x}}}, {{{view_yview + y}}} 대신 사용하기도 한다. Android, iOS 등에서는 제대로 된 위치에 드로우되지 않는다. 일반 Draw 이벤트와 달리 뷰가 여러 개 있어도 매 스텝마다 한 번씩만 실행된다. * '''PreDraw/PostDraw''' (GMS) 애플리케이션 서피스 위에 그리는 다른 이벤트와 달리 스크린 버퍼에 직접 그리는 이벤트이다. * PreDraw는 나머지 Draw 이벤트보다 먼저 실행된다. 특정한 설정을 하지 않으면 배경 등에 가려져 제대로 표시되지 않는다. * PostDraw는 Draw(Begin/End) 이벤트와 Draw GUI(Begin/End) 이벤트 사이에 실행된다. * '''Resize''' (GMS) 윈도 8에서 드로우 캔버스 크기가 변경되었을 때 실행되는 이벤트. 드로우 이벤트에 포함되지만 여기서는 드로우를 할 수 없다. 해당 모듈은 현재 지원이 중단되었다고 한다. == Step == * [[파일:external/gamemaker.info/event_step.gif]] 이런 아이콘을 가지고 있다. 1스텝({{{1/room_speed}}}초)마다 작동하는 이벤트이다. 항상 작동하는 이벤트라고 보면 된다. 체력 체크를 하거나 딜레이 설정 등으로 쓰인다. Draw 이벤트도 매 스텝 작동하지만 이쪽은 여타 이벤트보다 실행 순위가 가장 늦으며 뷰의 활성화 상태에 따라 1스텝당 여러 번 반복하기도 하니 Draw 이벤트는 원래 용도대로 드로우만 하자. 'Step', 'Begin/End Step'의 3가지로 나뉘어 있으며, 실행 순서는 Begin-일반-End이다. == Keyboard, Key Press/Release == * [[파일:external/gamemaker.info/event_keyboard.gif]] Keyboard 이벤트는 키보드만 그려져 있다. * [[파일:external/gamemaker.info/event_keypress.gif]] Press 이벤트는 빨간 화살표와 키보드가 그려져 있다. * [[파일:external/gamemaker.info/event_keyrelease.gif]] Release 이벤트는 초록 화살표와 키보드가 그려져 있다. 특정 키가 눌려 있을 때 계속(Keyboard), 혹은 특정 키를 누른 순간(Key Press)이나 뗀 순간(Key Release) 한 번 실행된다. 각각 * 상하좌우 방향키 * Ctrl/Alt/Shift/스페이스 바/엔터 키 * 'Keypad' 카테고리 아래에 * 키패드 0~9 * /, *, -, +, . * 'Digits' 카테고리 아래에 0~9(키패드가 아니라 문자 키 위에 수평으로 배열된 숫자 키를 말한다.) * 'Letters' 카테고리 아래에 A~Z * 'Function keys' 카테고리 아래에 F1~F12 * 'Others' 카테고리 아래 백스페이스, Esc, Home, End, Page Up/Down, Delete, Insert * No key(아무 키도 눌리지 않았을 때) * Any key(아무 키나 눌렸을 때) 의 82가지로 나뉘어 있다. == Collision == * [[파일:external/gamemaker.info/event_collision.gif]] 이런 아이콘을 가지고 있다. 특정 오브젝트와 충돌했을 때 계속 실행된다. 이벤트의 특성 때문에 현재 게임에 만들어져 있는 오브젝트의 수만큼의 하위 이벤트로 나뉘어 있다. 이 이벤트 안에서 코드를 쓸 때, {{{other}}}라는 예약어를 사용해서 {{{other.hp}}}와 같이 충돌한 인스턴스를 참조할 수 있다. 다만, {{{other}}} 자체는 상수일 뿐 '''충돌한 인스턴스 자체를 나타내지는 않기 때문에''' 충돌한 인스턴스의 id를 참조하려면 {{{other.id}}}와 같이 써야 한다. == Trigger (GM8) == * [[파일:external/gamemaker.info/event_trigger.gif]] 이런 아이콘을 가지고 있다. 구 버전 게임메이커에만 존재한다. GML을 이용하여 직접 실행 조건을 지정할 수 있는 사용자 정의 이벤트. == Asynchronous (GMS) == * [[파일:GMS_Asynchronous.png]] 지구 모양의 아이콘을 가지고 있다. 게임메이커: 스튜디오에만 존재한다. 인앱 결제 등 인터넷 환경이 개입되거나 입력과 출력이 시간차를 두고 일어날 경우 사용되는 비동기성 이벤트이다. 'Image Loaded', 'HTTP', 'Dialog', 'IAP', 'Cloud', 'Networking', 'Steam', 'Social', 'Push Notification', 'Save / Load', 'Audio Recording', 'Audio Playback', 'System Event' 등의 13가지로 나뉘어 있다. GMS의 대화상자 코드의 경우 비동기 함수({{{show_message_async()}}} 등)와 비동기가 아닌 함수({{{show_message()}}} 등)로 나뉘어 있으며, 전자는 대화상자가 떠도 게임이 계속 실행되지만 후자는 대화상자를 끌 때까지 게임이 멈춰 있다. 도움말에서는 실제 게임에 전자를 사용하고, 후자는 디버그 용도로만 사용하라고 권고하고 있다. 이는 {{{show_question()}}}, {{{get_integer()}}}, {{{get_string()}}}에도 똑같이 적용된다. [[분류:게임메이커]]