게임제작/강좌

[GML]기초 라이프 아이콘 및 게이지 HP를 인터페이스에 표시하기

게임코드프리 2020. 11. 1. 22:30
반응형

 

게임을 만들다보면 기본적으로 체력게이지를 사용할 것인지 라이프를 갯수로 표시할 것인지에 대해서

고민하게 되고 , 각각 만드는 방식이 다르다 보니 초보자들은 대체 어떻게 코드로 작성하는지 감을 잡기 힘듭니다.

사실 코드 자체가 너무나 간단하여 충격적일 정도이며 몇줄로 설명도 끝이납니다.

그러다보니 아무도 설명해주는 사람이 없는것이 당연할 정도이고 내용은 아래와 같습니다.

 

1. 크리에이트 코드에서 사용할 목숨값을 변수로 설정하기

///@desc create event init variables

global.life = 3;

 

2. 드로우 이벤트 혹은 드로우 GUI 이벤트로 for문을 사용

///@desc draw or draw_gui event

for (i = 0; i < global.life; i++)
{
draw_sprite_ext(spr_heart,0, 표시할 좌표 x + (아이콘 크기 * i)  , 
표시할 좌표 y , 1, 1, 0, c_white, 1);
}

 

자신의 목숨값 보다 작을때까지 반복시켜주는 포문으로 기본적으로 코드는 위에서 아래로 흘러가는 형태라

생각하면 됩니다.

그런데 for문의 경우에는 i = 0 에서 계속해서 조건(현재 코드상에선 목숨값)이 충족되지 않으면 i ++ (더해줌)

다음에는 i = 1이되고 다음엔 2가 되고 다음에 3이 되었을때 조건과 맞기 때문에 중지 됩니다.

(뭘 더 설명해야 하지...ㅠ)

 

아! 중요한 것은 draw_sprite 에서 표시할 좌표 다음에 ㅁㅁㅁ 이런식으로 순차적인 간격이 필요하기에

아이콘의 크기 * i (처음엔 아이콘 크기 다음엔 두배, 다다음엔 세배)가 되어 정렬이 되는 것도 중요.

 

 

- 너무 짧아서 이번에는 게이지로 표시할때의 경우 -

 

과거 망작 만들다 만 액션 게임 중

 

1. 게이지 형태의 알고리즘

 

///@desc system create event valiables

global.player_hp = 30;
global.player_hp_max = 30;

 

어디에 설정할지는 모르지만 일단 아무곳에서나 변수를 호출 할 수 있는 글로벌 변수로 사용하고

(반드시 그래야 하는것은 아님)

플레이어의 현재 HP와 최대 HP 변수를 만듭니다.

 

///@desc draw_event

hp_bar = global.player_hp/global.player_hp_max;

draw_sprite_ext(img_hp_bgback,0,view_xport[0]+94,view_yport[0]+70,hpmax_bar,1,0,c_white,alpha1)
draw_sprite_ext(img_hp_bar,0,view_xport[0]+95,view_yport[0]+70,hp_bar,1,0,c_white,alpha1)

 

다음에는 변동하는 HP값을 계산해주어야 하고 코드가 너무 길다보니

새로운 변수에 계산법을 넣습니다.

hp_bar 라는 변수에는 게이지가 닳았을때 계산식 변수이며 아래의 내용은

스프라이트 img_hp_bgback  같은 체력바 배경을 그려준 코드입니다.

드로우 이벤트 역시 코드의 순서대로 순차적으로 그려주기 때문에 이미지가 뒤에 있어야 하는 것을 먼저 그려주고

그 앞에 있어야 할 체력바는 마지막 코드에 hp_bar로 변수명으로 대체 해주는 것으로 체력바 알고리즘도

끝입니다.

 


[마치며]

참고로 글쓴이는 프로그래머가 아니므로 더 대단한 코드에 대해서 물어보아도 제대로 된 답변을 드리기 어렵습니다.

개인적으로 느끼는 프로그래밍은 그저 삽질과 구글링을 통한 노가다의 산물이며 

각각 사용하는 엔진의 함수를 계속 망가뜨려 보면서 습득하는 것이 가장 빠른 학습의 길입니다.

앞으로도 계속 잊어버릴 것 같은 알고리즘이나 게임에서 자주 쓰이는데 구현하기 난해했던 것들에 대해

기록을 하며 공유를 하는 것 정도로 봐주시면 감사하겠습니다.

반응형
facebook twitter kakaoTalk kakaostory naver band shareLink
人気ブログランキングでフォロー