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)를 사용하지만, 구성 이름에 따라 다른 매크로로 변경하여 사용할 수
있다는 것입니다.
'GameMaker강좌[GMS2] > GMS2기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GMS2]문자열 조합으로 리소스 참조 (0) | 2021.03.20 |
---|---|
[게임메이커 강좌-기초][GMS2] 사용자 숫자 표시 : 스프라이트 폰트 (1) | 2021.03.19 |
[게임메이커 강좌-기초][GMS2] enum : 열거형 데이터 타입 (2) | 2021.03.16 |
[게임메이커 강좌-기초][GMS2] 게임 저장 : 베이스64(Base64)로 암호화 저장 (0) | 2021.02.23 |
[게임메이커 강좌-기초][GMS2] 게임 저장 : 맵 데이터 구조체로 암호화 저장 (0) | 2021.02.21 |
댓글