GAME MAKER 강좌
KAYAN
◈ 게임상에서 외부 이미지 추가하기
게임상에서 아래 함수를 사용하면 외부 이미지 파일을 게임 내에 사용할 수 있는 스프라이트로 추가할 수 있습니다.
◎ sprite_add(fname, imgnumb, removeback, smooth, xorig, yorig); - fname : 추가 할 파일의 이름 (문자열 파일 경로) - imgnum : 추가할 하위 이미지 수(단일 이미지 또는 * .gif의 경우 최소 단위는 1) - removeback : 배경색 (왼쪽 아래 픽셀)이있는 모든 픽셀을 투명하게 만들지 여부 - smooth : 투명한 경우 가장자리를 매끄럽게할지 여부 - xorig : 스프라이트 중심점의 x 위치 - yorig : 스프라이트 중심점의 y 위치 |
이미지 파일 형식은 *.png, *.gif, *.jpg/jpeg 또는 *.json 형식이어야 합니다.
* .json 파일은 Spine으로 만든 뼈대 애니메이션 스프라이트를 로드하는데 사용됩니다.
이 함수는 스프라이트와 관련된 코드에서 사용할 수 있는 새 스프라이트 인덱스를 반환합니다.
이 함수를 HTML5와 함께 사용하거나 URL에서 이미지를 가져오는 경우, 함수는 Image Loaded 비동기 이벤트도 발생합니다
[imgnum]는 외부 이미지 소스를 애니메이션 형식으로 몇개의 하위 이미지로 구성할 지를 지정합니다.
게임메이커의 애니메이션 스프라이트로 변환될 모든 이미지는 스트립 형식을 가지며,
스프라이트 너비에 따라 지정된 "스프라이트 이미지 너비 = 스트립 너비(전체크기) / 하위 이미지 수" 규칙으로 분할됩니다.
(▲ 스트립 이미지)
예를 들어, [imgnum]을 16으로 설정하면 가져올 이미지 소스를 16개로 분할하여 스프라이트 이미지로 추가하게 됩니다.
1을 설정하면, 분할하지 않고, 이미지 그대로 추가하게 되는 거죠. 지정할 최소 단위는 1입니다.
(▲ 애니메이션 이미지)
외부 이미지의 배경색을 제거해야 하는 경우 [removeback] 을 true 로 설정하면 됩니다.
보통 *.png파일은 투명한 배경을 지원하기 때문에, 투명도를 유지한 이미지 그대로 가져오려면 false 를 지정합니다.
[removeback]이 활성화되면 소스 이미지의 알파 채널이 무시됩니다.
주의 하실 것은 배경색 제거는 이미지의 왼쪽 하단 모서리 1픽셀의 색상으로 결정됩니다.
(▲ 왼쪽 하단 모서리 1픽셀의 색성에 따라 배경색 제거에 영향을 줌)
그렇기 때문에 이미지 주변에 배경색과 혼합이 된 색상(투명도 때문에)이 있거나 색상값이 왼쪽 하단의 1픽셀 색상값과 다를 경우 제거되지 않고 남을 수 있습니다.
(▲ 배경색을 제거한 이미지 - 이 처럼 테두리에 배경색이 남지 않으려면 테두리에도 깔금하게 채워야 함)
즉, "배경색" 이외의 모든 픽셀이 완전히 불투명해지기 때문에 깔금하게 제거하려면,
이미지의 테두리를 배경색으로 깔금하게 채우거나, 배경색 제거가 필요 없는 투명도를 유지한 *.png 파일을 활용하는 것이 좋습니다.
[removeback] 옵션을 선택하고 [smooth] 인자를 true로 설정하면 스프라이트의 가장자리를 부드럽게 처리할 수 있습니다.
다만, 이것은 배경이 제거된 스프라이트 가장자리 주변의 테두리를 반투명하게 만드는 것 뿐입니다.
마지막으로 스프라이트의 x 및 y 중심점을 지정할 수도 있습니다.
예를 들어, 64X64크기의 이미지에서 중심점을 이미지의 가운데로 설정하고 싶다면 (32,32)로 지정할 수 있습니다.
*.gif 형식의 애니메이션 이미지는 첫 프레임만 가져올 수 있습니다. 따라서 [imgnum]에 1이상 지정하면 첫 프레임 이미지만을 분할하여 추가하게 됩니다.
*.json 스프라이트의 경우 이미지 번호는 1이어야 하며 [removeback] 및 [smooth] 설정은 무시됩니다.
예)
global.user_sprite = sprite_add("player_5.png", 16, false, false, 0, 0); |
※ [참고] : 함수 사용시 게임이 설치되는 앱폴더가 아닌 다른 폴더, 또는 다른 디스크의 폴더를 엑세스하려면 게임옵션(Game Option) ▶ Platform Settings ▶ Windows ▶ General ▶ Disable file system sandbox 을 체크(Windows, macOS)해야 합니다.
※ [참고] : [Included files] 에 포함된 파일은 파일경로를 아래처럼 파일명(추가 폴더가 있을 경우 추가 폴더도 지정)만 지정하거나, 또는, working_directory 내장 변수와 함께 파일경로를 작성할 수 있습니다.
fname = "player_5.png"; 또는, fname = working_directory+"player_5.png"; |
※ [참고] : 경로에 기호 '\'를 단독으로 사용할 경우 문자열 명령어로 인식해서 경로를 제대로 인식 못할 수 있습니다.
※ 그럴 때는 아래와 같이 문자열을 @기호로 처리하거나, '\'를 2개 사용(\\, 기호 '\'를 표시하는 명령어)하면 됩니다.
fname = @"image\player_5.png"; 또는, fname = "image\\player_5.png"; |
마지막으로 외부로부터 이미지를 추가한 다음, 이미지가 더 이상 필요 없을 때는 sprite_delete 함수로 메모리에서 완전히 제거하는 것이 좋습니다.
◎ sprite_delete(index)
if sprite_exists(global.user_sprite){ sprite_delete(global.user_sprite); } |
'GameMaker강좌[GMS2] > GMS2기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GMS2] 스프라이트 이미지 저장하기 (0) | 2024.03.20 |
---|---|
[게임메이커 강좌-기초][GMS2] 추가한 스프라이트 이미지에 충돌 마스크 설정 (0) | 2024.03.20 |
[게임메이커 강좌-기초][GMS2] 파일 열기와 파일 저장 함수 (1) | 2024.03.19 |
[게임메이커 강좌-기초][GMS2] 앱폴더 이외의 경로 엑세스 (0) | 2024.03.18 |
[게임메이커 강좌-기초][GMS2] 배열값 우선순위로 정렬하기 (2) | 2024.01.03 |
댓글