Programming/GMS

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

wnsrn3436 2013.08.31 20:10

 

이번 강좌에서는 위와 같은 스프라이트의 색상 분리를 만들어 볼 것입니다.

이 강좌는 김게맛(sodium031)님의 강좌를 참고하여 만들어졌음을 미리 밝힙니다.

 

 

이 강좌를 보기 전에 먼저 화면에 색상이 그려지는 원리를 알아봅시다.

컴퓨터의 기본적인 화면 색상은 빨강(R), 초록(G), 파랑(B)으로서 구성되어 있습니다.

각각의 색상들은 255가 최댓값이며 이들 셋이 모여서 하나의 픽셀을 만듭니다.

하얀색의 경우 위 세 가지 색상은 각각 255, 255, 255가 되는데, 컴퓨터 용어로는 $FFFFFF(16진수)로 표현됩니다.

 

첫 번째 강좌에서, 게임메이커: 스튜디오(GameMaker: Studio)의 c_white(하얀색)은 스프라이트 색상에 어떠한 변화도 주지 않는 색이라고 말씀드렸었습니다.

색 분리는 바로 이런 원리를 이용합니다.

스프라이트를 어떤 색상 두가지로 그려서 둘을 합치면 하얀색이 되게 해버리는 것이죠.

위 그림을 보시면 $FF8000 와 $0080FF 색이 만나서 하얀색이 되는 것을 보실 수가 있습니다.

 

 

본격적으로 제작해봅시다.

룸을 만들고, view_surface_id 로 뷰를 끌어다 쓸 것이므로 뷰 사용에 체크를 해줍니다.

 

 

저번 강좌에서 view_surface_id 는 오브젝트의 깊이(Depth)에 영향을 받는다고 설명하였습니다.

하지만 이번 강좌에서는 비록 'sys_surfaces' 오브젝트와 'obj_just_image' 오브젝트의 깊이가 같지만, 깊이를 다르게 하지 않았습니다.

그 이유가 무엇이냐면 sys_surfaces 라는 놈이 Draw GUI 이벤트를 사용하기 때문입니다.

Draw GUI 이벤트는 모든 오브젝트들의 드로우 이벤트가 끝나고 발동하는 이벤트이기 때문에 view_surface_id 기능의 깊이 제약이 사라집니다.

 

 

이제 Create 이벤트에서 서피스 두 개를 만듭니다.

첫 번째 서피스는 뷰를 그리는 서피스가 될 것이며, 두 번째 서피스는 뷰의 특정 부분만을 그리는 서피스가 될 것입니다.

 

 

이제 화면을 그려봅시다.

먼저 draw_surface(suf, 0, 0) 코드로 suf(서피스)에 복사된 뷰를 그립니다.

 

그리고 suf2 에 있던 그림을 draw_clear_alpha(c_white, 0) 로 청소해줍니다. (이전 스텝에서 suf 를 복사했기 때문에 지워줘야 합니다.)

이제 suf 의 특정 부분(뷰)을 suf2 에 복사하고, suf2 를 화면에 그리기 전에 특정 부분이 그려질 영역을 사각형으로 검게 칠하는데, 이 작업을 하는 이유는 그 영역에 이미 뷰가 그려져 있기 때문입니다.

 

draw_set_blend_mode(bm_add) 는 색상을 혼합을 시작하는 역할을 합니다.

draw_set_blend_mode(bm_normal) 는 색상 혼합을 끝내는 역할을 합니다.

 

색상 혼합을 왜 하냐면 두 개의 색상을 합쳐서 하얀색을 만들어야 하기 때문이죠.

강좌의 두 번째 사진에서, $FF8000 와 $0080FF 색이 만나 $FFFFFF 색이 된다고 했었습니다.

위 코드에서도 똑같은 원리를 이용하지만 겜스는 RGB 가 아니라 BGR 로 색상을 표기하기 때문에 거꾸로($0080FF, $FF8000) 적었습니다.

 

이제 게임을 실행시켜 보면 특정 부분에서 색상 분리가 일어난 것을 보실 수가 있습니다.

 

Surfaces 3.gmz

 

http://cafe.naver.com/playgm

Tag
0 Comments