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

[게임메이커 강좌-기초][GMS2] macro : 매크로

by 타락카얀 2021. 3. 18.
728x90

 

 

GAME MAKER 강좌

 

 

KAYAN

 

 

 

 

 

◈ 매크로(Macro)

 

 

매크로(Macro)는 반복되는 수식 따위의 블록들이나 지정된 상수 값을 간단하게 명칭으로

대체하여 간소화 할 수 있는 기능입니다.

예를 들어, 체력 게이지를 계산할 때 (hp/hp_max)*width 와 같은 수식이 있다면,

이 수식을 gauge로 매크로로 명칭하여 수식을 대신하여 사용할 수 있습니다.

 

정확히 변수는 아니지만 사용 방법이 비슷합니다.

변수와 다른 점이라면 이미 정의된 매크로의 값은 게임에서 변경할 수 없다는 점입니다.

 

매크로의 정의 구성은 다음과 같습니다.

 


   #macro <매크로 이름> <값>

 

예를 들어, "total_weapons" 매크로를 정의한다고 가정합니다

 

※ 매크로는 앞에 "#"를 붙입니다. 매크로에 단일 값을 정의(변수에 할당, 또는 비교 등을 위해)할 때,

매크로 끝에는 세미콜론 기호 ";" 를 붙이지 않습니다.

 


   #macro total_weapons 10

 

그리고 아래의 코드를 호출합니다.

 


   if ++pos == total_weapons
      {
      pos = 0;
      }

 

pos값이 1씩 더해지고, pos 값이 매크로 total_weapons 값과 같다면 pos값이 0으로 설정됩니다.

 

만약 아래의 값을 적용한다면 어떻게 될까요?

 


   total_weapons = 11; //이미 정의된 매크로의 값은 변경할 수 없기 때문에 오류가 발생

 

먼저 말씀드렸다시피 이미 정의된 매크로의 값은 변경할 수 없기 때문에 오류가 발생합니다.

하지만 정의된 매크로의 값은 직접적으로 변경할 수 없습니다만, 수식에 변수가 사용되었을 때는

변수 값을 변경하여 매크로에 적용할 수 있습니다.

 

 

 

 

 

◈ 수식을 포함한 매크로 정의

 

 

예를 들어, 아래와 같이 값을 합산하는 수식을 매크로로 정의했을 때,

 


   #macro aaa b+c+d

 

매크로를 사용하여 수식을 간단하게 처리할 수도 있습니다.

 


   var b,c,d,it;
   b=5;
   c=6;
   d=20;


   test = aaa; //aaa 는 5+6+20=31

 

aaa 가 b+c+d 이므로 test 값은 31 이 적용이 됩니다.

만약, 이후에 b 나 c, 또는 d 값을 변경하면, aaa 에 변경된 값이 반영되어 적용됩니다.

 

그리고 아래와 같이 체력값을 화면에 표시하기위해 수치화했을 때,

 


   #macro gauge (hp/hp_max)*width

 

이 매크로 수식을 이용하여 게이지를 표시할 때 사용할 수도 있습니다.

 


   //체력과 같은 게이지를 표시할 경우, 수식을 gauge로 명칭하여 사용


   var width;
   width=240;//매크로의 width 값에 적용


   draw_rectangle_color(10-2,16-2,10+width+2,16+8+2,c_black,c_black,c_black,c_black,0);
   draw_rectangle_color(10,16,10+gauge,16+8,c_red,c_red,c_red,c_red,0);


   width=320;
   draw_rectangle_color(10-2,30-2,10+width+2,30+8+2,c_black,c_black,c_black,c_black,0);
   draw_rectangle_color(10,30,10+gauge,30+8,c_red,c_red,c_red,c_red,0);

 

또한, 매크로에 함수를 포함할 수도 있습니다.

 


   //랜덤 색 적용


   #macro col make_colour_hsv(irandom(255), 255, 255)

 

함수가 포함된 매크로를 아래와 같이 응용할 수 있어요.

 


   //랜덤 색 적용


   image_blend = col;

 

그리고 매크로에 함수를 포함 했을 때, 또는 수식이 긴 경우가 있지요.

그럴 때는 기호 "\"를 사용하여 줄바꿈을 할 수 있습니다.

예를 들면, 아래와 같이 매크로를 정의 할 수도 있습니다.

 

※ 매크로를 단일 값에 사용(변수에 할당, 또는 비교 등)하는 것이 아니라면, 매크로 끝에

세미콜론 기호 ";" 를 사용할 수 있습니다.

 


   #macro hello draw_text(32,32+(py),"Hello, "+\
   "World "+string(line));\
   py+=16;\
   line+=1; //◀ 매크로는 "\" 다음 줄인 여기까지 정의 됨.






   var line, py;
   line=0;
   py=0;


   draw_set_color(c_black);
   hello;
   hello;//py좌표를 이동한 위치에 표시

 

매크로에 의해 텍스트를 (32,32)에 "Hello, World"표시하고, py 좌표를 16만큼 이동시킵니다.

이 때 매크로를 또 사용하게 된다면, py 좌표를 16만큼 이동시킨 위치에 표시하게 되는 것이죠.

즉, 매크로를 정의할 때, "\"로 줄바꿈하면 다음 줄까지 매크로가 정의되는 것입니다.

 

실제 표시는 아래와 같습니다.

 


   Hello, World 0
   Hello, World 1

 

 

 

 

 

◈ 구성 요소(Config)와 함께 매크로 정의

 

 

매크로는 특정 구성 요소 (Configuration Editor 에서 편집)와 함께 정의 할 수도 있습니다.

 


   #macro <매크로 이름> <값> //기본 사용 매크로



   #macro <구성요소 이름1>:<매크로 이름> <값> //대체 사용 매크로

   #macro <구성요소 이름2>:<매크로 이름> <값>
   ...

 

예를 들어, 구성 요소에 "Android" 라는 이름의 구성요소가 있다고 가정해봅시다.

 

(▲ Config Editor)

 

※ 구성 요소는 에셋 브라우저의 Config Editor 에서 편집할 수 있습니다.

 

(▲ Config Editor)

 

하나의 매크로를 사용하지만, 현재 선택한 구성 요소 이름(Config)에 따라 다른 값으로 대체하여

사용할 수 있습니다.

먼저 아래와 같이 기본으로 사용할 매크로를 정의합니다.

그리고 대체 사용할 매크로를 정의하면 됩니다.

 


   #macro ad_id ""


   #macro Android:ad_id "com.yoyogames.googlegame"
   #macro iOS:ad_id "com.yoyogames.appstoregame"

 

구성 이름을 먼저 지정하고, 콜론 ":" 을 삽입후 매크로 이름과 값을 지정합니다.

콜론 ":" 과 구성(Config) 이름 또는 매크로 이름 사이에 공백이 있으면 안 됩니다. 그렇지 않으면

오류가 발생합니다.

 

위의 코드는 매크로 ad_id를 사용했을 때, 구성 이름(Config)이 Android 이면 Android 매크로를

대체 사용하고, iOS면 iOS 매크로를 대체 사용하게 됩니다. 만약 구성요소에 해당 이름이 없다면

기본 매크로가 적용이 됩니다.

즉, 하나의 매크로(ad_id)를 사용하지만, 구성 이름에 따라 다른 매크로로 변경하여 사용할 수

있다는 것입니다.

 

 

 

 

 

 

 

 

 

 

300x250

댓글