제스처 이벤트
제스처 이벤트란?
제스처 이벤트는 GameMaker가 마우스나 터치 스크린에서 "제스처"를 감지할 때 발생합니다. 이 이벤트는 주로 모바일 장치에서 사용되지만, 다른 플랫폼에서도 마우스를 감지하는 데 사용할 수 있습니다. 제스처 시스템의 목표는 직접적인 마우스/터치 읽기 기능보다 높은 수준의 입력을 인식하여 터치 기반 장치에서 일반적으로 사용되는 입력을 간소화하는 것입니다.
참고: HTML5 플랫폼에서는 멀티 터치 지원이 부족하여 이러한 이벤트가 발생하지 않습니다. 이 플랫폼에서 제스처를 감지하려면 장치 기능을 사용해야 합니다.
인스턴스 제스처와 글로벌 제스처
- 인스턴스 제스처: 초기 터치/클릭이 방 안의 인스턴스에서 발생할 때만 트리거됩니다. 인스턴스는 유효한 충돌 마스크를 가져야 합니다.
- 글로벌 제스처: 게임 방의 어디에서나 터치/클릭이 발생할 때 트리거됩니다.
이벤트 데이터
제스처가 인식되면 하나 이상의 이벤트가 트리거되며, 트리거된 이벤트는 감지된 제스처의 유형에 따라 다릅니다. 모든 경우에 event_data
라는 DS 맵이 생성되어 사용됩니다. 이 맵의 키는 생성된 이벤트의 종류에 따라 다릅니다.
참고: event_data
변수는 이러한 이벤트에서만 유효하며, 이벤트 시작 시 자동으로 생성되고 이벤트 종료 시 파괴됩니다.
제스처 종류
탭, 드래그 및 플릭 이벤트
- 탭: 빠른 터치와 릴리스를 감지합니다.
- 드래그: 터치를 유지하고 이동할 때 발생합니다.
- 플릭: 드래그가 끝날 때 빠른 이동이 감지되면 발생합니다.
예제 코드
// 탭 이벤트
Create Event
x_goto = x;
y_goto = y;
Tap Event
x_goto = event_data[? "posX"];
y_goto = event_data[? "posY"];
Step Event
var _pd = point_distance(x, y, x_goto, y_goto);
move_towards_point(x_goto, y_goto, clamp(_pd, 0, 5));
더블 탭 이벤트
빠른 연속 터치를 감지합니다.
예제 코드
// 더블 탭 이벤트
Double Tap Event
instance_destroy();
드래그 시작, 드래그 중 및 드래그 종료 이벤트
드래그 시작은 터치를 유지할 때 발생하고, 드래그 중은 매 스텝마다 발생합니다. 드래그 종료는 터치를 릴리스할 때 발생합니다.
예제 코드
// 드래그 시작 이벤트
drag_offsetX = x - event_data[?"posX"];
drag_offsetY = y - event_data[?"posY"];
// 드래그 중 이벤트
x = event_data[?"posX"] + drag_offsetX;
y = event_data[?"posY"] + drag_offsetY;
핀치 이벤트
두 개의 터치가 동시에 감지될 때 발생하며, 핀치 인과 핀치 아웃 이벤트가 있습니다.
예제 코드
// 핀치 시작 이벤트
pinching = true;
pinch_x = event_data[? "midpointX"];
pinch_y = event_data[? "midpointY"];
// 핀치 인/아웃 이벤트
var _scale = event_data[? "relativescale"];
camera_set_view_size(view_camera[0], camera_get_view_width(view_camera[0]) * _scale, camera_get_view_height(view_camera[0]) * _scale);
회전 이벤트
두 개의 터치가 동시에 감지되고, 일정 각도로 회전할 때 발생합니다.
예제 코드
// 회전 시작 이벤트
rotating = true;
// 회전 중 이벤트
var _relangle = event_data[?"relativeangle"];
var _a = camera_get_view_angle(view_camera[0]);
_a += _relangle;
camera_set_view_angle(view_camera[0], _a);
이벤트 데이터 키 설명
키 | 설명 |
---|---|
gesture | 현재 제스처의 고유 ID 값 |
touch | 제스처에 사용되는 터치의 인덱스 |
posX | 터치의 방 공간 X 위치 |
posY | 터치의 방 공간 Y 위치 |
rawposX | 터치의 원시 윈도우 공간 X 위치 |
rawposY | 터치의 원시 윈도우 공간 Y 위치 |
guiposX | 터치의 GUI 공간 X 위치 |
guiposY | 터치의 GUI 공간 Y 위치 |
diffX | 현재 터치와 마지막 터치 간의 X 차이 |
diffY | 현재 터치와 마지막 터치 간의 Y 차이 |
isflick | 드래그 종료 이벤트에서만 사용, 플릭으로 감지되면 1로 설정 |
이 문서에서는 제스처 이벤트의 기본 개념과 다양한 활용 예제를 다루었습니다. 각 이벤트의 사용법과 관련된 코드 스니펫을 통해 실제 구현에 도움이 되기를 바랍니다.