GameMaker강좌[GMS2]/GMS2기초강좌

[게임메이커 강좌-기초][GMS2]목표물 방향과 거리측정

타락카얀 2023. 7. 12. 14:25
728x90

 

 

GAME MAKER 강좌

 

KAYAN

 

 

 

 

 

◈ 목표물의 방향측정

 

 

목표물의 방향은 아래 함수로 측정할 수 있습니다.

 

   ◎ point_direction(x1,y1,x2,y2)

 

이 함수는 현재 지점(x1,y1)을 기준으로 목표물(x2,y2)을 바라보는 각도를 측정하여 값을 반환합니다.

 

(▲ 방향 측정)

 

함수로 반환되는 값은 0~360 사이의 값입니다.

 

(▲ 방향 측정)

 

예)


   var ex, ey;
   ex = instance_nearest(x, y, enemy).x;
   ey = instance_nearest(x, y, enemy).y;
   direction = point_direction(x, y, ex, ey);


 

예시는 현재 위치에서 가까운 enemy 인스턴스의 방향을 측정하여 direction 에 적용합니다.

 

 

 

 

 

◈ 목표물과의 거리측정

 

 

거리측정에 대해 알아봅시다.

먼저 아래 함수는 (x1,y1)에서 (x2,y2)까지의 거리를 측정하여 값을 반환합니다.

 

   point_distance(x1,y1,x2,y2)

 

거리를 측정하기위해 간단하게 2개의 위치를 제공하면 거리를 측정할 수 있습니다.

 

(▲ 거리 측정)

 

예)


   var ex, ey;
   ex = instance_nearest(x, y, enemy).x;
   ey = instance_nearest(x, y, enemy).y;
   if (point_distance(x, y, ex, ey) < 200)
   {
       instance_create_layer(x, y, "Bullets", obj_Missile)
   }


 

예시는 현재 위치에서 가까운 enemy 인스턴스와의 거리가 200 미만일 때, obj_Missile 오브젝트를 Bullets 레이어에 생성합니다.

 

 

 

아래 함수는 현재 오브젝트로부터 지정한 오브젝트(obj)까지의 최단 거리를 측정하여 값을 반환합니다.

 

   distance_to_object(obj)

 

(▲ 거리 측정)

 

주의할 것은 이 함수로 얻는 거리 값은 현재 오브젝트와 지정한 오브젝트에 지정된 사각형 모양의 충돌 박스 설정 기준으로 측정됩니다.

 

(▲ 단점 - 사각형 모양의 충돌 박스 설정 기준으로 거리를 측정함)

 

간단하게 최단 거리를 측정할 수 있으나, 현재 오브젝트와 목표물 오브젝트는 image_angle 회전값에 영향을 받아

측정할 수 있는 충돌 박스의 크기도 늘어나거나 줄어들 수 있어, 측정된 최단거리가 다르게 나타날 수 있습니다.

 

예)


   if (distance_to_object(obj_Player) < 320)
   {
       canshoot = true;
   }


 

예시는 현재 오브젝트와 obj_player 오브젝트간의 최단거리가 320 미만일 때 canshoot 변수를 true 값으로 할당합니다.

 

 

아래 함수는 현재 오브젝트로부터 지정한 위치(x,y)까지의 최단 거리를 측정하여 값을 반환합니다.

 

   distance_to_point(x,y)

 

(▲ 거리 측정)

 

주의할 것은 이 함수로 얻는 거리 값은 현재 오브젝트에 지정된 사각형 모양의 충돌 박스 설정 기준입니다.

distance_to_object 함수와 마찬가지로, 현재 오브젝트는 image_angle 회전값에 영향을 받아 측정할 수 있는

충돌 박스의 크기도 늘어나거나 줄어들 수 있어, 측정된 최단거리가 다르게 나타날 수 있습니다.

 

예)


   if (distance_to_point(obj_Player.x, obj_Player.y) < 320)
   {
       canshoot = true;
   }


 

예시는 현재 오브젝트와 지정한 위치까지의 최단거리가 320 미만일 때 canshoot 변수를 true 값으로 할당합니다.

 

 

 

 

 

300x250