Programming/GMS

GMS, 멀티 터치를 구현해보자

wnsrn3436 2013.09.08 17:42

 

이번 강좌에서는 모바일에서 종종 사용되는 멀티 터치를 다뤄볼 것이며, 위 사진의 예제를 토대로 강의합니다.

멀티 터치는 윈도우에서는 별로 쓸 일이 없는 기능이긴 하지만, 모바일(안드로이드, IOS, Windows Phone)에서는 꼭 필요한 기능이니 익혀두는 것이 좋습니다.

또한, 이 강좌에서는 서피스를 사용하니 그 기능을 모른다면 서피스 강좌를 먼저 읽어두시는 편이 좋습니다.

 

 

Object0 의 Create 이벤트입니다.

 

화면에 터치한 흔적이 남아야 하므로 서피스를 만들고 검은색으로 초기화했습니다.

mouse_previous 배열은 터치의 이전 좌표를 담는 역할을 할 것이고, mouse_check 배열은 현재 터치를 하는 중인지에 관한 여부를 담을 것입니다.

 

device_mouse_dbclick_enable 라는 함수는 연속 두 번 터치를 오른쪽 마우스 클릭처럼 인식할 것인지를 설정하는 함수입니다.

초깃값은 true 이며, 저는 오른쪽 마우스에 관한 기능을 사용하지 않을 것이기 때문에 false 으로 설정하였습니다.

 

* 게임메이커: 스튜디오에서는 터치를 왼쪽 마우스 클릭처럼 인식합니다.

 

 

Step 이벤트입니다.

이곳에서 터치 좌표를 받고, 서피스를 그리는 등 별짓을 다 하기 때문에 코드가 조금 깁니다.

하지만 알고 보면 별거 아니므로 너무 겁먹지는 마세요!

 

위 사진에서 색칠한 구역을 설명하겠습니다.

 

먼저 surface_set_target 으로 앞으로 draw 함수는 서피스에 그리게끔 설정하였습니다.

또한, 게임메이커: 스튜디오에서는 현재 멀티 터치를 5개까지만 지원하기 때문에, for 문이 0~4 까지만 도는 것을 보실 수가 있습니다.

 

device_mouse_check_button_released 함수로 터치를 땟을 경우 mouse_check 배열을 false 로 만듭니다.

device_mouse_check_button_pressed 함수로 터치했을 때, 최초 터치라면 화면을 새로 청소합니다.

 

 

디바이스에서, 터치 좌표를 구하는 함수는 device_mouse_x/y, device_mouse_raw_x/y 이렇게 두 가지가 있습니다.

device_mouse_x/y 함수는 게임상의 실질적인 좌표를 반환해주며, device_mouse_raw_x/y 함수는 디바이스상의 좌표를 반환해줍니다.

 

이 강좌에서는 device_mouse_raw_x/y 함수에 대한 이해를 돕고자 device_mouse_raw_x/y  함수를 사용하였습니다.

이 함수는 디바이스상의 좌표를 반환하기 때문에, 모바일과 같은 게임 화면을 스케일링하는 OS 의 경우 특별한 계산이 필요해집니다.

그래서 위 코드를 보면 "round(device_mouse_raw_x(i)/(display_get_width()/room_width))" 와 같은 게임상의 실질적인 좌표를 구하는 코드가 따로 존재합니다.

 

비록 이 강좌에서는 device_mouse_raw_x/y 함수를 사용하였지만, 여러분들은 device_mouse_x/y 함수를 이용해주세요.

device_mouse_x/y 함수는 게임상의 실질적인 좌표를 반환하므로 따로 좌표를 구하는 계산이 필요 없기 때문입니다.

 

 

이 코드들은 서피스에 원을 그리는 역할을 합니다.

33~44 라인의 역할은 이전 터치 좌표에서 현재 터치 좌표까지 투명한 원을 그리는 것입니다. (이 작업을 하는 이유는 디바이스 상의 터치 위치는 매우 빠르게 이동되기 때문에, 틈을 메꿔줄 원이 필요하기 때문입니다.)

46~50 라인에서는 현재 위치에 불투명한 원을 그리고, 현재 위치를 이전 위치에 저장합니다.

 

Device Touch.gmz

 

http://cafe.naver.com/playgm

Tag
0 Comments