GAME MAKER 강좌
KAYAN
◈ GIF 이미지 저장 기능
게임메이커에서는 완벽하지는 않지만, 간단하게 GIF 이미지 파일을 구성할 수 있는 기능이 있습니다.
GIF 이미지는 색상수가 256 색상(Universal 884 Palette)으로 제한되지만 간단한 짤방 정도는 만들 수 있지요.
(▲ GIF 이미지)
아래는 GIF 이미지 구성시 사용할 수 있는 함수들입니다.
◎ gif_open(width, height); ◎ gif_add_surface(gif_index, surface, delay_time, [xoffset], [yoffset]); ◎ gif_save(gif_index, fname); |
이 기능을 사용하기 위해서는 서피스로부터 이미지를 추가해야하기 떄문에 서피스 기능을 같이 사용해야 합니다.
GIF 구성은 기본적으로 아래와 같이 3 단계로 나뉩니다.
1) gif_open(...) //GIF 이미지의 크기를 설정 및 GIF ID를 반환 2) gif_add_surface(...) //GIF 에 서피스로부터 프레임 이미지를 추가 3) gif_save(...) //모두 추가했다면 파일로 저장 |
일단 함수에 대해 알아봅시다.
먼저 아래 함수로 GIF 형식의 이미지 구성을 시작할 수 있습니다.
◎ gif_open(width, height) - width : gif 의 너비 - height : gif 의 높이 |
함수를 호출 할 때 GIF 이미지의 너비와 높이를 제공하면 함수는 GIF 이미지를 구성할 수 있는 GIF ID 를 반환합니다.
GIF 크기는 제한이 없지만, 값이 클 수록 GIF 구성이 느려지거나 사용 가능한 메모리에 비해 너무 큰 경우 오류가 발생할 수 있습니다.
참고로 게임메이커의 GIF 이미지는 투명도, 또는 투명색 지원이 없습니다.
기본적으로 뒷 배경(투명한 부분이 노출될 경우)을 검은색으로 불투명 처리하는데, 다른 배경색을 원한다면 서피스 구성시 원하는 배경을 뒤에 깔아주면 됩니다.
다음 함수는 GIF 이미지에 프레임을 추가할 수 있는 함수입니다.
◎ gif_add_surface(gif_index, surface, delay_time, [xoffset], [yoffset], [quantization] ) - gif_index : 서피스 데이터를 추가할 gif ID - surface : 프레임으로 추가하는데 사용할 서피스 ID - delay_time : 프레임의 지연 시간 (100 분의 1 초) - [xoffset] : [선택 사항] 추가 할 서피스의 X축 오프셋 - [yoffset] : [선택 사항] 추가 할 서피스의 Y축 오프셋 - [quantization] : [선택 사항] 0에서 3까지의 양자화 양 (최저 품질 0, 최고 품질 3, 기본값은 2) |
gif_open으로부터 반환된 GIF ID에 프레임을 추가할 서피스를 지정합니다.
delay_time 은 프레임의 지연시간(1/100)을 지정합니다.
현재 프레임이 다음 프레임으로 넘어가는 시간으로 값이 클 수록 느려지고, 작을 수록 빨라집니다.
소수점도 가능하나 브라우저에 따라 다르기 때문에 정수로 지정(최소 단위 1~)하는 것이 좋습니다.
게이메이커에서 아래와 같이 설정하시면 될 거에요.
delay_time=round(100/게임속도)*지연시간 //게임속도가 60, 지연시간 없이 게임속도에 맞출 경우 delay_time=round(100/60); |
[xoffset], [yoffset] 는 선택 사항으로 프레임으로 추가할 서피스의 위치를 지정합니다.
값을 지정하지 않으면 자동으로 (0,0)으로 부터 추가합니다.
[quantization] 는 선택 사항으로 GIF 품질을 지정합니다.
값이 작으면 저품질로, 클 수록 품질이 향상됩니다만, 결과 퀄리티를 보면... 값을 변경하는 것을 별로 권장하지는 않습니다.
기본 값은 2로 설정되어있습니다.
마지막으로 모든 프레임이 추가되었다면 아래 함수로 GIF 파일로 저장할 수 있습니다.
◎ gif_save(gif_index, fname) - gif_index : 저장할 gif ID - fname : gif 로 저장할 파일 이름(확장자 포함) |
파일로 저장할 GIF ID와 파일명을 지정하면 됩니다.
사용예)
//Create 이벤트 count = 0; //프레임 카운트 save_gif = false; //true면 GIF 구성시작 //GIF 구성 이벤트 if save_gif == true //GIF 저장 체크 { if count == 0{ //GIF 구성 시작 gif_image = gif_open(room_width, room_height);//GIF 구성 호출 } else{ if count < 30{ gif_add_surface(gif_image, application_surface, round(100/60));//프레임 추가 } else{ gif_save(gif_image, "GameCapture.gif");//파일 저장 count = 0; save_gif = false; } } count++;//프레임 카운트 } |
먼저 gif_open를 호출해 룸의 크기만큼 GIF 를 만들 준비를 합니다.
다음 count 수가 30(프레임) 미만일 때 gif_add_surface함수로 GIF 프레임을 추가하고 count 를 1더해줍니다.
count가 30(프레임) 이 되었다면 gif_save 함수를 호출해 파일로 저장합니다.
추가로 아래 함수는 gif_open 함수로 구성한 GIF 이미지를 게임메이커 버퍼에 저장할 수 있는 함수입니다.
◎ gif_save_buffer(gif_index) //GIF를 버퍼로 저장 - gif_index : 저장할 gif ID ◎ buffer_save(buffer,fname) //버퍼를 파일로 저장 |
gif_save_buffer 함수는 GIF 데이터를 1 바이트로 정렬된 증가 버퍼(grow buffer)로 저장합니다.
이후에 버퍼를 삭제하지 않는 한, buffer_save(buffer,fname) 함수를 사용하여 GIF 파일로 다시 저장할 수 있습니다.
global.capture_buff = gif_save_buffer(gif_image); buffer_save(global.capture_buff, "GameCapture.gif"); |
'GameMaker강좌[GMS2] > GMS2기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GMS2] 게임메이커에서 비디오 재생-2 : 비디오 제어 함수 (0) | 2024.03.22 |
---|---|
[게임메이커 강좌-기초][GMS2] 게임메이커에서 비디오 재생-1 : 기본 (0) | 2024.03.22 |
[게임메이커 강좌-기초][GMS2] 스프라이트 이미지 저장하기 (0) | 2024.03.20 |
[게임메이커 강좌-기초][GMS2] 추가한 스프라이트 이미지에 충돌 마스크 설정 (0) | 2024.03.20 |
[게임메이커 강좌-기초][GMS2] 게임상에서 외부 이미지 추가하기 (2) | 2024.03.19 |
댓글