본문 바로가기
GameMaker강좌[GM8]/기초강좌

[게임메이커강좌-기초] 마우스로 오브젝트를 드래그하여 이동하기

by 타락카얀 2016. 12. 2.
728x90



GAME MAKER 강좌



KAYAN








마우스로 오브젝트를 드래그하여 이동하기



이번 강좌에서는 마우스로 룸에 있는 오브젝트를 드래그하여 이동시키는 방법에 대해 알아보도록 해요.

일반적으로 마우스 좌표는,



mouse_x : 마우스 x 좌표
mouse_y : 마우스 y 좌표



위의 변수를 사용합니다.

참고로 멀티 포인트 터치 환경 이라면,



device_mouse_x(device) : 0 ~ 4 포인트 체크(스튜디오 이상 지원 함수)
device_mouse_y(device)



이 함수를 통해 세부적(최대 5 포인트 동시 체크)으로 체크할 수 있습니다만, 강좌에서는 간단하게

mouse_x, mouse_y를 사용해봅시다.

룸에 존재하는 오브젝트를 이동하기 위해서는, 오브젝트의 이동하기 전 좌표를 필요로 합니다.



(▲ 마우스 위치를 저장)


보통 아래와 같이, 오브젝트의 x, y를 마우스의 좌표에 맞추어 이동할 수도 있지만,



x=mouse_x;
y=mouse_y;



어느 위치를 클릭했든, 오브젝트의 x, y 좌표에 강제로 맞추기 때문에 불편한 장면이 연출되기도 합니다.
그래서 클릭한 위치를 유지하고, 이동하려면, 먼저 아래와 같이, 현재 오브젝트의 좌표에서 현재 마우스

좌표를 빼고,



prev_mouse_x=x-mouse_x;
prev_mouse_y=y-mouse_y;



그리고 그 차이를 이동할 때 더해주면,



x=mouse_x+prev_mouse_x;
y=mouse_y+prev_mouse_y;



클릭한 위치를 유지하고, 오브젝트를 마우스가 이동하는 곳으로 이동시킬 수 있습니다.
간단하죠.



(▲ 마우스 위치로 이동)


이벤트로 구성한다면,



★ Create 이벤트


drag_on=0;//마우스 이전 좌표 저장 스위치
prev_mouse_x=0;//마우스 이전 좌표
prev_mouse_y=0;


 

★ Step 이벤트


if mouse_check_button(mb_left){//마우스를 클릭 했을 때

if position_meeting(mouse_x,mouse_y,id) and drag_on=0{
//현재 오브젝트가 마우스 위치에 있다면,

prev_mouse_x=x-mouse_x;
prev_mouse_y=y-mouse_y;
drag_on=1;
}
//※ 오브젝트 좌표와 마우스 좌표의 차이를 1번만 저장하고,


if drag_on=1{
x=mouse_x+prev_mouse_x;
y=mouse_y+prev_mouse_y;
}
//이전 좌표의 차이를 현재 마우스 좌표에 더해 오브젝트의 위치를 갱신함

}
else{drag_on=0;}
//마우스를 클릭하지 않는다면, 기능을 다시 사용할 수 있도록 변수 리셋



위와 같이 구성할 수 있습니다.

마우스를 클릭하고, 현재 오브젝트가 마우스 포인트에 위치한다면, 현재 좌표와 마우스 좌표의 차이를

저장해둡니다. 그리고 오브젝트의 좌표는 마우스 현재 좌표에 이전에 저장해둔 값을 더해주면, 마우스

포인터 위치로 이동하게 됩니다.





drag_object_ex.gmk




300x250

댓글