Programming/GMS

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

wnsrn3436 2013.08.30 22:08

 

원래 서피스(Surfaces)쪽 강좌는 쓰지 않으려고 했지만 추후에 연계되는 강좌가 있어서 쓰고자 합니다.

왜 제가 서피스 강좌를 쓰지 않으려고 했느냐면, 서피스는 그 기능만으로는 뛰어난 그래픽을 구현할 수가 없기 때문입니다.

서피스는 블렌드(Blend)와 연계해야지만 비로소 빛을 발하는 기능인데, 저는 블렌드를 잘 모릅니다.

그래서 이 강좌에서는 블렌드와 연계한 서피스가 아니라 단순히 서피스의 대략적인 부분만을 살펴보도록 하겠습니다.

 

서피스란, 사용자가 임의로 설정할 수 있는 새로운 화면입니다. (포토샵의 레이어와 비슷한 개념입니다.)

일반적으로 게임메이커: 스튜디오(GameMaker: Studio)의 화면은 뷰를 기준으로 구성되어 있으며, 이 뷰라는 놈은 매 스탭마다 화면이 지워지고 다시 그려지는 연산을 반복합니다.

반면 서피스는 사용자가 임의로 설정한 화면이기 때문에 사용자가 직접 화면을 클리어해주는 등 여러 가지가 뷰와는 다릅니다.

 

 

 

서피스 혹은 서피스와 블렌드 혹은 서피스와 쉐이더(Shaders) 기능을 사용하면 부분적으로 화면을 조작할 수가 있습니다.

한마디로, 서피스를 잘 조작하면 화면을 왜곡하거나 3D 틱한 효과를 줄 수도 있습니다.

위 사진의 유체 결합 기능이나, 부분 확대 기능도 복잡하지만 만들어낼 수가 있죠.

 

 

이번 강좌에서는,

간단하게 이 화면에 있는 사과를 확대해보는 서피스를 구현해보겠습니다.

 

 

Object0 의 Create 이벤트입니다.

서피스도 구조체 함수가 그러하듯, 생성과 파괴의 과정을 거쳐야 하는데, surface_create ~ surface_free 함수가 그 역할을 해줍니다. (서피스를 다 사용하신 뒤에는 반드시 surface_free 함수를 거쳐 메모리를 확보해주세요.)

 

위 코드에서 보듯이 서피스는 드로우의 시작과 끝을 알리는 "surface_set_target ~ surface_reset_target" 함수가 존재합니다.

위 두 함수 사이에 드로우를 하게 되면, 겜메 뷰에 그려지지 않고 서피스에 그림이 그려지게 됩니다.

위 코드에서는 draw_clear_alpha(혹은 draw_clear) 함수로 서피스를 초기화 해준 뒤, 사과 스프라이트를 그렸습니다.

 

 

사과가 그려진 서피스를 2배 확대해서 게임메이커 화면에 그리게 되면 사과가 확대될 것입니다.

c_white 는 게임메이커에서 스프라이트의 색상에 어떠한 변화도 주지 않는 초깃값입니다.

 

 

게임을 실행시켜 보면 이렇게 확대된 사과를 보실 수가 있습니다.

 

 

* 주의사항

 

이 강좌에서는 따로 처리하지 않았지만, 서피스는 비디오 메모리에 존재하기 때문에 언제나 사라질 수가 있습니다. 따라서 서피스 함수를 사용하기 전, surface_exists를 통해 해당 서피스가 존재하는지 체크한 뒤, 서피스가 존재하지 않으면 새로 서피스를 생성해야 합니다.

 

 

Surfaces 1.gmz

 

http://cafe.naver.com/playgm

Tag
0 Comments