GAME MAKER 강좌
KAYAN
◈ 뷰 서피스
때때로 게임 화면을 화면 전환이나 다른 형태의 이미지로 사용하고 싶을 때가 있죠.
이럴 때 사용할 수 있는 뷰 서피스는 카메라 뷰에서 보이는 화면을 서피스로 활용할 수 있는 기능입니다.
(▲ 뷰 서피스를 활용한 화면)
서피스로 본뜬 화면에 이펙트를 적용하여 표시하거나 다른 이미지로 쓸 수 있어요.
뷰 서피스는 아래 변수에 서피스 ID를 할당하여 사용할 수 있습니다.
◎ view_surface_id[0~7]
- 0~7 : 사용할 카메라
뷰 서피스는 카메라 뷰당 1개씩, 총 7개까지 설정할 수 있습니다.
※ [참고] 뷰 서피스와 비슷한 기능으로 application_surface 내장 전역 변수가 있습니다.
게임메이커는 기본적으로 게임 화면(Draw GUI 이벤트는 제외)을 서피스에 그려 화면에 표시하는데,
이 서피스가 application_surface 입니다.
간단하게 사용하려면 application_surface 를 활용하시면 됩니다.
뷰 서피스를 사용하려면 먼저, 사용할 카메라 뷰를 하나를 활성화해야 합니다.
(▲ 카메라 뷰 활성화)
강좌에서는 카메라 뷰 0번을 활성화 하겠습니다.
서피스를 만들기 위해 변수를 추가해줍니다.
//● Create 이벤트 surf = -1; |
서피스는 처음에 생성해도 됩니다만, 서피스는 휘발성이므로 OS 메모리 관리 및 기타 요인으로 인해
언제든지 메모리에서 제거될 수 있습니다.
따라서 이미지를 표시할 수 있는 [Draw 이벤트]에서 서피스가 존재하는지 확인하고,
서피스가 없는 경우 서피스를 생성하여 카메라 뷰 0에 할당합니다.
//● Draw 이벤트 var vw,vh; vw=camera_get_view_width(view_camera[0]); vh=camera_get_view_height(view_camera[0]); if !(surface_exists(surf)){ surf=surface_create(vw,vh); view_surface_id[0]=surf; } |
마지막으로 [Draw GUI 이벤트]에서 뷰 서피스로 얻은 이미지를 표시하면 됩니다.
//● Draw GUI 이벤트 if surface_exists(surf){ draw_surface_stretched(surf, 0, 0, display_get_gui_width(), display_get_gui_height()); } |
◈ 예제
간단하게 화면 전환할 때 사용할 수 있는 페이드 아웃 - 페이드 인 효과를 만들어봅시다.
(▲ 페이드 아웃 - 페이드 인)
카메라뷰 0번을 활성화합니다.
그리고 오브젝트를 하나 만들고, 서피스 변수를 추가합니다.
//● Create 이벤트 surf_view=-1;//뷰 서피스용 surf_image=-1;//이펙트로 구성한 다음, 화면에 표시 effect_scale=1;//화면 확대/축소 값 effect_on=0;//화면 전환 스위치 : 1=페이드 아웃, 2=페이드 인 |
[Draw Begin 이벤트]에서 서피스를 생성하도록 합니다.
//● Draw Begin 이벤트 var vw,vh; vw=camera_get_view_width(view_camera[0]); vh=camera_get_view_height(view_camera[0]); if !(surface_exists(surf_view)){ surf=surface_create(vw,vh); view_surface_id[0]=surf_view; } if !(surface_exists(surf_image)){ surf_image=surface_create(vw+64,vh+64); } |
[Draw GUI 이벤트]에서 서피스화된 뷰서피스를 사용하여 스크린 이펙트를 구성하면 됩니다.
//● Draw GUI 이벤트 var vw,vh; vw=camera_get_view_width(view_camera[0]); vh=camera_get_view_height(view_camera[0]); //페이드 아웃 if effect_on==1{effect_scale-=0.01;} //페이드 인 if effect_on==2{effect_scale+=0.01;} effect_scale=max(0,min(effect_scale,1)); var sca; sca=max(0.02,effect_scale); surface_set_target(surf_image); draw_clear_alpha(c_black,0); draw_surface_ext(surf_view,0,0,sca,sca,0,c_white,1); surface_reset_target(); var c; c=c_black;draw_rectangle_color(-1,-1,vw+1,vh+1,c,c,c,c,0);//배경 if effect_scale>0{ draw_surface_ext(surf_image,0,0,1/sca,1/sca,0,c_white,1);//화면 } //테스트용 if keyboard_check_pressed(vk_space){effect_on+=1;} if effect_on>2{effect_on=0;} |
effect_on 값이 1일 때, 페이드 아웃 효과를 볼 수 있고, 2일 때는 페이드 인 효과를 볼 수 있습니다.
상황에 따라 값을 변경하면 됩니다.
예제에서는 스페이스 키를 누르면 바로 확인할 수 있어요.
'GameMaker강좌[GMS2] > GMS2기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GMS2] 3D 사운드 재생 (0) | 2023.01.31 |
---|---|
[게임메이커 강좌-기초][GMS2] 사운드 재생 (0) | 2023.01.29 |
[게임메이커 강좌-기초][GMS2]마우스 좌표 (0) | 2023.01.18 |
[게임메이커 강좌-기초][GMS2]목표 방향으로 천천히 회전 (0) | 2023.01.15 |
[게임메이커 강좌-기초][GMS2] 오브젝트를 마우스 드래그로 이동 (2) | 2023.01.14 |
댓글