본문 바로가기
GameMaker강좌[GMS2]/GMS2기초강좌

[게임메이커 강좌-기초][GMS2] 게임상에서 외부 이미지 추가하기

by 타락카얀 2024. 3. 19.
728x90

 

 

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);
   }


 

 

 

 

 

 

 

 

 

 

300x250

댓글