프로그래밍 강의/게임메이커 스튜디오

GMS, 서피스로 게임 퀄리티를 향상시켜 보자 -2-

wnsrn3436 2013. 8. 31. 14:44

 

이번에는 위와 같이 룸을 전환하는 효과를 서피스로 만들어 볼 것입니다.

룸 전환 효과는 게임메이커: 스튜디오(GameMaker: Studio)에서 이미 지원하는 기능이지만 사용자가 직접 만들어 볼 수도 있습니다.

 

 

먼저 위처럼 뷰를 2개 사용하는 룸을 2개 만듭니다.

저는 룸 전환 효과를 확실하게 보여주기 위해 룸 1의 사과를 룸 0과는 다르게 배치하였습니다.

 

 

룸 전환 담당 오브젝트는 룸이 끝나도 유지되어야 하므로 Persistent 체크를 하였습니다. (그러니까 룸 0에만 오브젝트를 배치하시면 됩니다.)

강좌에서는 위와 같은 이벤트들을 사용하는데, 'Game End' 이벤트는 서피스 파괴 함수만 있으므로 코드 설명은 생략하도록 하겠습니다.

 

 

Create 이벤트입니다.

view_surface_id[*] 라는 놈은, 해당 번호의 뷰를 서피스에 붙여 넣는 역할을 합니다. (초깃값은 -1 입니다.)

 

view_surface_id 는 해당 번호의 뷰를 서피스에 붙여 넣기 때문에, 뷰에 그려지는 모든 것들은 화면에 그려지지 않게 됩니다.

그러므로 서피스에 복사된 그 뷰를 수동으로 그려주어야(draw_surface) 화면을 갱신할 수가 있습니다.

하지만 이번 강좌에서는 화면을 수동으로 갱신하지 않고 뷰를 하나 더 만드는 방법(View 0, View 1)으로 화면을 뷰가 그리게끔 하였습니다.

 

view_surface_id 기능에 대해 주의할 점은, 이 기능은 오브젝트의 깊이(Depth)에 영향을 받는다는 것입니다.

view_surface_id 는 해당 시간에 해당 프레임을 서피스에 실시간으로 전달하고, 오브젝트는 깊이에 따라 드로우 이벤트가 발생하기 때문에 어떤 오브젝트에서 view_surface_id 를 사용한 서피스를 그렸다면 그땐 그 오브젝트의 깊이를 거친 드로우 이벤트들까지만 서피스에 뷰가 복사된 것입니다.

 

기억하세요.

view_surface_id 는 매 스탭마다 복사되는 것이 아니라 실시간으로 프레임에 넣어집니다.

'윈도우 기본 색상 -> 백그라운드 -> 인스턴스의 깊이에 따른 드로우 이벤트' 과정을 실시간으로 전달받는 것입니다.

 

 

Enter 이벤트입니다.

이 이벤트에서는 룸을 전환하게 되는데, 룸을 전환할 때 image_alpha 값을 변경해 주면서 룸 전환 효과를 시작시킵니다.

코드를 살펴보자면 "view_surface_id[0] = -1" 코드로 더는 서피스에 뷰가 복사되지 않도록 하고, "room_goto(!room)" 코드로 룸을 반전하여 이동합니다.

 

 

Step 이벤트에서는 투명도를 계속 줄여가다가, 투명도가 0 이 되었을 때, "view_surface_id[0] = suf" 코드로 다시 서피스에 뷰가 복사되게끔 설정합니다.

투명도가 0 이 되었다는 것은 룸 효과가 끝났다는 것을 의미하기 때문에 다음 효과를 준비하는 것입니다.

 

 

이제 서피스에 투명도를 주어서 드로우를 하게 되면, 이전 룸의 화면이 점점 투명하게 되면서 전환 효과를 주게 됩니다.

참 쉽죠? ㅎㅎ

 

Surfaces 2.gmz

 

http://cafe.naver.com/playgm

Comments