<잔상효과(afterimage) 구현하기>
img 출처 : http://ca.nexon.com/Strategy/Content/1530
잔상효과를 구현하는방법에 대해서 조금 얘기해볼까 합니다.
이를테면 위와같은 크레이지 아케이드 의 '샤샤샥' 효과같은.. 많은곳에 자주 사용되는 효과입니다.
구현하는 방식에는 여러가지가 있는데 저는 난이도와 효율적인 방식을 고려하여 두가지 방식을 소개하고자 합니다.
<1> 잔상용 인스턴스를 따로만들어서 마구잡이로 찍어내기
이 방법은 가장 단순하게 생각할 수 있는 방법입니다. 위와같이 스프라이트 1개,
오브젝트 2개를 준비합니다. (주인공 오브젝트와 주인공의 잔상 오브젝트)
일단 주인공 오브젝트 안에는 스텝 이벤트 하나만 넣어 설계합니다.
위는 방향키로 인스턴스를 이동시키기위한 설정이고 아래는 아까 준비한 두번째 오브젝트로 인스턴스를 찍어내는 역할을 합니다.
사실상 주인공 인스턴스에서는 매 스텝마다 잔상이되는 인스턴스를 생성하는것 외에는 별다른 설계가 없습니다.
이번에는 잔상이 될 오브젝트의 설계입니다. 마찬가지로 이벤트는 스텝이벤트만 필요합니다.
이미지 투명도가 감소되어 투명도가 0이되면 인스턴스가 삭제되도록 설정하였습니다.
결과는 멋진 샤샤샥 효과가 구현되었습니다.
별다른 해설이 필요하지 않을정도로 코드의 흐름만 보면 누구나 간단하게 이해할수있는 잔상효과의 구현방식입니다.
하지만 아무래도 이 방법은.. 잔상이 되는 인스턴스를 매 스텝마다 계속해서 찍어내다보니 속도가 느리고 효율적이지 못합니다.
<2> 자료구조를 이용한 잔상효과!
다시 처음으로 돌아와서 이번에는 두번째 방식을 사용해봅시다. 이번에는 오브젝트가 1개면 충분합니다!
이 방법은 자료구조에대한 이해가 필요한데.. 게임메이커 도움말을 참조하셔도 되고 게임메이커 카페에 관련 게시물이 많으니
'ds_list' 라는 키워드로 검색해보시는게 좋을것 같습니다.
오브젝트는 총 4개의 이벤트로 설계할 수 있습니다.
[Create] 이벤트의 코드입니다.
aft_img_x 와 aft_img_y 에 자료구조 리스트를 생성해서, 그 리스트의 id를 담아둡니다.
쉽게 말해서 데이터를 저장할 공간을 만들어두고 그 공간의 이름으로 aft_img_x 와 aft_img_y 로 지칭합니다.
[Step] 이벤트의 코드입니다.
맨 위는 아까와 마찬가지로 방향키 이동을 구현해놓은 부분이고
ds_list_add 함수를 이용해서 아까만든 데이터를 담아놓는 공간인 aft_img_x 와 aft_img_y에 현재좌표를 순차적으로 저장합니다.
그 후, 마지막 while 문에서 리스트에 자료의 갯수가 최대가 넘어가면 제일 먼저 담았던 데이터부터 제거합니다.
[Draw] 이벤트의 코드입니다.
리스트의 담아둔 자료(매 스텝마다 담아둔 좌표값) 으로 스프라이트를 그려줍니다.
마지막으로 [Game End] 이벤트에서
게임이 종료될때 사용한 리스트구조의 메모리를 비워줍니다.
결과는 마찬가지로 멋진 샤샤샥! 이 구현되었습니다.
예제파일┐
첫번째방식에 작성했던걸 덮어서 강좌를 작성하다보니 첫번째 방식을 사용한 예제는 파일을 첨부하지 못했습니다.
'GMStudio > GMS 팁/예제' 카테고리의 다른 글
게임메이커 스튜디오 :: 안드로이드 빌드(apk 뽑아보기) (3) | 2015.10.04 |
---|---|
게임메이커 스튜디오 :: 파일 입출력을 이용한 게임데이터 저장하고 불러오기 (6) | 2015.10.01 |
게임메이커 스튜디오 :: 인스턴스 특정 위치 바라보게하기 (2) | 2015.07.19 |
게임메이커 스튜디오 :: 응용프로그램(.exe) 파일 뽑기 (0) | 2015.06.09 |
게임메이커 스튜디오 :: 스킨 바꾸기 (0) | 2015.05.30 |