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

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

by 타락카얀 2023. 1. 14.
728x90

 

 

GAME MAKER 강좌

 

KAYAN

 

 

 

 

 

◈ 오브젝트를 마우스 드래그로 이동

 

 

이번 강좌에서는 오브젝트를 마우스 드래그로 이동하는 방법에 대해 알아봅시다.

 

(▲ 마우스 드래그로 이동)

 

오브젝트를 마우스 드래그로 이동 시키려면 오브젝트의 현재 위치와 마우스 포인터 위치를 알아야 합니다.

그리고 마우스 클릭 중일 때, 오브젝트의 현재 위치와 마우스 포인터 위치의 차의 값을 저장합니다.

오브젝트의 현재의 위치에 마우스 포인터 위치와 차의 값을 더해주면 오브젝트를 마우스로 끌어줄 수 있습니다.

 

(▲ 오브젝트의 위치과 마우스 포인터의 위치)

 

먼저 드래그에 필요한 변수가 필요합니다.

드래그시 마우스의 위치가 오브젝트의 어느 위치에 있는지 알 필요가 있습니다.

 


   //● 드래그할 오브젝트 - Create 이벤트

   drag_on=0;//마우스 드래그 체크

   drag_x=0;//오브젝트를 드래그했을 때, 마우스 포인터의 위치
   drag_y=0;


 

다음은 [End Step 이벤트] 에 드래그를 설정해줍니다.

여기서 마우스를 클릭 중일 때, 오브젝트 현재 좌표에 마우스 좌표를 뺀 값을 저장합니다.

 


   //● 드래그할 오브젝트 - End Step 이벤트

   var mx,my;

   mx=mouse_x;//마우스 좌표
   my=mouse_y;
   
   if mouse_check_button(mb_left){//마우스를 클릭중일 때
   
   if drag_on==0{//오브젝트와 마우스 좌표의 차이값을 저장
   drag_x=x-mx;
   drag_y=y-my;
   drag_on=1;}
   
   }


 

만약 현재 오브젝트 내에 마우스 포인터가 있을 때만 드래그 가능하게 하려면 아래와 같이,

 


   //● 드래그할 오브젝트 - End Step 이벤트

   var mx,my;

   mx=mouse_x;//마우스 좌표
   my=mouse_y;
   
   if mouse_check_button(mb_left){
   
   if position_meeting(mx,my,self){//현재 오브젝트 내에 마우스 포인터가 있을 때 작동
   if drag_on==0{
   drag_x=x-mx;
   drag_y=y-my;
   drag_on=1;}
   }
   
   }

 

현재 오브젝트가 마우스 위치와 충돌하는지를 체크하고 드래그를 작동시키면 됩니다.

 

 

다음 저장한 값을 마우스 좌표에 더해주면 끝입니다.

 


   //● 드래그할 오브젝트 - End Step 이벤트

   var mx,my;

   mx=mouse_x;
   my=mouse_y;
   
   if mouse_check_button(mb_left){
   
   if drag_on==0{
   drag_x=x-mx;
   drag_y=y-my;
   drag_on=1;}
   
   //----- ▼ 추가
   
   if drag_on==1{//오브젝트 이동
   x=mx+drag_x;
   y=my+drag_y;
   }
   
   //----- ▲ 추가
   
   }


 

간단하죠.

 

마지막으로 마우스를 클릭 중이 아닐 때는 다시 드래그할 수 있도록 드래그 변수를 초기화 합니다.

 


   //● 드래그할 오브젝트 - End Step 이벤트

   var mx,my;

   mx=mouse_x;
   my=mouse_y;
   
   if mouse_check_button(mb_left){
   
   if drag_on==0{
   drag_x=x-mx;
   drag_y=y-my;
   drag_on=1;}
   
   if drag_on==1{
   x=mx+drag_x;
   y=my+drag_y;
   }
   
   }
   //----- ▼ 추가
   

   else{drag_on=0;}//마우스를 클릭하지 않았을 때는 초기화
   

   //----- ▲ 추가


 

간단하게 완성되었네요.

이와 같이 하면 마우스를 클릭하고 이동하면 오브젝트를 끌어주는 효과를 볼 수 있습니다.

 

(▲ 테스트)

 

기본적인 원리만 설명했지만, 응용하면 다양한 형태에 적용할 수 있을 거에요.

 

 

 

 

 

 

 

300x250

댓글