게임메이커/게임메이커: 스튜디오에서 오브젝트의 이벤트에 대하여 설명한다. 게임메이커 도움말을 확인.
1. Create
- 이런 아이콘을 가지고 있다.
인스턴스가 처음 생성 시 작동한다. 변수 초기화, 타임라인 시작, 패스(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이 된다.2. Mouse
- 이런 아이콘을 가지고 있다.
이 이벤트는 여러 하위 이벤트로 분리된다.
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종류의 하위 이벤트로 나뉘어 있다.
3. Destroy
- 이런 아이콘을 가지고 있다. 윈도우 XP 시절의 휴지통 아이콘과 같다.
해당 인스턴스가 파괴될 때 작동한다. 적 오브젝트가 사망 시 점수 추가나 사망 이펙트를 적용하는 데 유용하다.
인스턴스를 삭제하는 코드나 액션(
instance_destroy();
등)을 사용할 때 실행된다. 룸이 바뀌거나 게임이 종료될 때는 실행되지 않는다.[출처]4. Other
- 이런 아이콘을 가지고 있다.
-
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가 체크된 룸에는 최초 입장 시에만 실행된다.[2]
'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종류를 사용할 수 있다.
5. Alarm
- 이런 아이콘을 가지고 있다.
알람을 설정하면 일정 시간 이후 해당 이벤트가 실행된다. 매 시간마다 무엇을 할 것인지 정하는데 매우 유용하다. 같은 주기로 몬스터를 소환하는 등으로 사용할 수 있다. 0부터 11까지 12종류를 사용할 수 있다.
내부적으로는 기본적으로 제공하는 전역 변수
alarm[n]
으로 판정하며, 해당하는 알람 이벤트가 없다면 카운트다운되지 않는다. alarm[n]
에는 남은 스텝 수가 저장되며, 0일 경우 이번 스텝에 알람이 울리고, 알람을 설정하지 않았다면 -1이 된다.6. Draw
- 이런 아이콘을 가지고 있다.
여러 가지 하위 이벤트로 나뉜다.
- 같은 종류의 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에서 드로우 캔버스 크기가 변경되었을 때 실행되는 이벤트. 드로우 이벤트에 포함되지만 여기서는 드로우를 할 수 없다. 해당 모듈은 현재 지원이 중단되었다고 한다.
7. Step
- 이런 아이콘을 가지고 있다.
1스텝(
1/room_speed
초)마다 작동하는 이벤트이다. 항상 작동하는 이벤트라고 보면 된다. 체력 체크를 하거나 딜레이 설정 등으로 쓰인다.Draw 이벤트도 매 스텝 작동하지만 이쪽은 여타 이벤트보다 실행 순위가 가장 늦으며 뷰의 활성화 상태에 따라 1스텝당 여러 번 반복하기도 하니 Draw 이벤트는 원래 용도대로 드로우만 하자.
'Step', 'Begin/End Step'의 3가지로 나뉘어 있으며, 실행 순서는 Begin-일반-End이다.
8. Keyboard, Key Press/Release
- Keyboard 이벤트는 키보드만 그려져 있다.
- Press 이벤트는 빨간 화살표와 키보드가 그려져 있다.
- 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(아무 키나 눌렸을 때)
9. Collision
- 이런 아이콘을 가지고 있다.
특정 오브젝트와 충돌했을 때 계속 실행된다. 이벤트의 특성 때문에 현재 게임에 만들어져 있는 오브젝트의 수만큼의 하위 이벤트로 나뉘어 있다.
이 이벤트 안에서 코드를 쓸 때,
other
라는 예약어를 사용해서 other.hp
와 같이 충돌한 인스턴스를 참조할 수 있다. 다만, other
자체는 상수일 뿐 충돌한 인스턴스 자체를 나타내지는 않기 때문에 충돌한 인스턴스의 id를 참조하려면 other.id
와 같이 써야 한다.10. Trigger (GM8)
- 이런 아이콘을 가지고 있다.
구 버전 게임메이커에만 존재한다. GML을 이용하여 직접 실행 조건을 지정할 수 있는 사용자 정의 이벤트.
11. Asynchronous (GMS)
- 지구 모양의 아이콘을 가지고 있다.
게임메이커: 스튜디오에만 존재한다. 인앱 결제 등 인터넷 환경이 개입되거나 입력과 출력이 시간차를 두고 일어날 경우 사용되는 비동기성 이벤트이다.
'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()
에도 똑같이 적용된다.
[출처]
https://cafe.naver.com/playgm/69477
[2]
Persistent가 체크된 룸은 다른 룸으로 가도 사라지지 않고 룸 상태를 유지하기 때문. 'Room end' 이벤트도 마찬가지 이유로 실행되지 않는다.