본문 바로가기
GameMaker강좌[GMS2]/액션게임강좌

[게임메이커 강좌-액션][GMS2]봄버맨 만들기-6 : 점수 표시 및 상단 인터페이스

by 타락카얀 2022. 2. 4.
728x90

 

 

 

 

 

◈ 몬스터 파기시 점수 표시

 

 

몬스터 파기시 점수를 표시해봅시다.

 

(▲ 점수 표시)

 

숫자는 스프라이트 이미지를 활용할 것입니다.

이미지로 구성하면 폰트에는 없는 단순형태에서부터 복잡한 모양까지 다양한 모양을 구성할 수 있죠.

하지만 강좌에서는 아래와 같이 간단하게 구성하겠습니다.

 

(▲ 숫자)

 

0 ~ 9 까지의 숫자 이미지를 스프라이트 이미지로 추가합니다.

 

(▲ 숫자 이미지)

 

이제 이미지를 폰트로 만들어야 합니다.

게임 시스템 오브젝트의 [Game Start 이벤트]에 이미지 폰트로 추가합니다.

 



     ● obj_game_system - Game Start 이벤트
     
     global.game_font = font_add_sprite( spr_font_small, ord( "0" ), 1, 2 );

 

그리고 [Game End 이벤트]를 추가하고, 추가한 이미지 폰트를 파기하도록 합니다.

 



     ● obj_game_system - Game End 이벤트
     
     if font_exists( global.game_font ){ font_delete( global.game_font ); }

 

이제 이미지 폰트를 사용할 준비가 되었습니다.

몬스터 점수 표시는 오브젝트를 생성해서 표시하도록 합니다.

점수 표시용 오브젝트를 하나 만듭니다.

 

(▲ 점수 표시용 오브젝트)

 

이 오브젝트는 몇초동안 점수만 표시하고, 바로 파기할 것입니다.

[Create 이벤트]를 추가하고, [알람 이벤트]를 호출합니다.

 



     ● obj_score_point - Create 이벤트
     
     value = 0; //점수값
     alarm[0] = 30; //파기시간
     
     image_blend = c_white; //혼합색

 

[알람 이벤트]를 추가하고, 현재 오브젝트를 파기합니다.

 



     ● obj_score_point - Alarm 0 이벤트
     
     instance_destroy( );

 

이제 점수를 표시해야겠지요.

먼저, 추가한 이미지 폰트를 설정하고, 폰트를 정렬합니다.

가로 정렬은 draw_set_halign(가로정렬) 함수를 사용하여 정렬합니다.

 

   ◎ fa_left : 왼쪽 정렬

   ◎ fa_center : 가운데로 정렬

   ◎ fa_right : 오른쪽으로 정렬

 

세로 정렬은 draw_set_halign(세로정렬) 함수를 사용하여 정렬합니다.

 

   ◎ fa_top : 위로 정렬

   ◎ fa_middle : 중간으로 정렬

   ◎ fa_bottom : 아래로 정렬

 



     ● obj_score_point - Draw 이벤트
     
     draw_set_font( global.game_font ); //이미지 폰트 설정
     
     draw_set_halign( fa_center ); //폰트 정렬
     draw_set_valign( fa_middle );
     
     draw_text_color( x, y, string( value ), image_blend, image_blend, image_blend
     , image_blend, 1 );


 

마지막으로 텍스트를 표시하면 됩니다.

 

이 오브젝트를 몬스터의 [폭발 오브젝트와의 충돌 이벤트]에서 생성하면 됩니다.

 



     ● obj_enemy_01 - obj_bomb_explo 와의 충돌 이벤트
     
     var it;
     it = instance_create_depth( x+16, y+16, -10000, obj_score_point );
     it.value = 100;

 

잘 작동하는지 테스트해봅시다.

 

 

 

 

 

◈ 화면 상단에 정보 표시

 

 

강좌가 막바지에 다다랐네요.

화면 상단에 라이프 및 점수를 표시해봅시다.

 

(▲ 라이프 및 점수 표시)

 

상단에 표시할 인터페이스 이미지를 준비합니다.

 

(▲ 상단 인터페이스)

 

표시할 좌표는 이미지 편집기에서 마우스 커서를 이미지에 가져다 대었을 때 상태 표시줄(왼쪽 하단)에서

확인할 수 있어요.

 

(▲ 이미지에서 좌표 확인하는 방법)

 

먼저 라이프부터 표시해봅시다.

게임 시스템 오브젝트에 [Draw Gui 이벤트]를 추가합니다.

 

[Draw GUI 이벤트]는 [Draw 이벤트]와는 달리, 카메라의 좌표, 크기 및 회전의 영향을 받지 않는
GUI(그래픽 사용자 인터페이스) 요소를 표시하기 위해 사용되는 특별한 이벤트입니다.
이 이벤트는 [Draw 이벤트] 보다 화면 맨 앞에 표시되며, 좌표는 카메라 좌표가 아닌
GUI 화면에서의 좌표를 사용합니다.
GUI 화면은 기본적으로 카메라의 크기로 설정되지만, 아래의 함수로 변경할 수도 있습니다.

   ◎ display_set_gui_size(width, height);

 

[Draw GUI 이벤트] 에서 표시를 원하는 위치에 라이프 변수값을 표시하도록 합니다.

 



     ● obj_game_system - Draw Gui 이벤트
     
     draw_sprite( spr_top_gui, 0, 0, 0 );
     var c, _x, _y;
     
     //라이프
     draw_set_font( global.game_font );
     draw_set_halign( fa_center );
     draw_set_valign( fa_middle );
     
     _x = 96;
     _y = 16;
     
     c = c_white; draw_text_color( _x, _y, string( global.game_life ), c, c, c, c, 1 );

 

다음은 폭탄 설치 가능 수를 표시해보겠습니다.

 



     ● obj_game_system - Draw Gui 이벤트
     
     //폭탄 설치 가능 수
     draw_set_halign( fa_center );
     draw_set_valign( fa_middle );
     
     _x = 192;
     _y = 16;
     
     c = c_white;
     draw_text_color( _x, _y
     , string( global.bomb_numb-instance_number( obj_bomb ) ), c, c, c, c, 1 );

     

 

게임 점수도 표시해봅시다.

 



     ● obj_game_system - Draw Gui 이벤트
     
     //게임 점수
     draw_set_halign( fa_right );
     draw_set_valign( fa_middle );
     
     _x = 320;
     _y = 16;
     
     c = c_white; draw_text_color( _x, _y, string( global.game_score ), c, c, c, c, 1 );
     

 

마지막으로 타이머를 표시합니다.

타이머는 분, 초로 나누어 표시해보아요.

 



     ● obj_game_system - Draw Gui 이벤트
     
     //타이머
     var m, s;
     draw_set_halign( fa_center );
     draw_set_valign( fa_middle );
     
     _x = room_width/2;
     _y = 16;
     
     m = floor( ( global.game_time*( 1/60 ) )*( 1/60 ) ); //분
     s = ceil( ( global.game_time*( 1/60 ) ) mod 60 ); //초
     
     c = c_white; draw_text_color( _x-16, _y, string( m ), c, c, c, c, 1 );
     c = c_white; draw_text_color( _x+16, _y, string( s ), c, c, c, c, 1 );

 

여기까지 잘 되는지 테스트 해봐요.

 

 

 

bomberman_05.yyz
0.47MB

 

 

 

 

 

 

 

 

 

300x250

댓글