sprite_add_from_surface 함수 설명
sprite_add_from_surface 함수는 sprite_create_from_surface() 함수와 동일하게 작동합니다. 하지만 이 함수는 선택한 표면의 특정 영역에서 새로운 스프라이트를 생성하는 대신, 이전에 생성된 스프라이트에 정의된 표면의 영역을 새로운 서브 이미지로 추가합니다. 즉, 리소스 트리에서 직접 스프라이트에 추가할 수는 없으며, 오직 표면에서 생성된 스프라이트나 sprite_duplicate()를 사용하여 복제된 스프라이트에만 추가할 수 있습니다.
이 방법으로 스프라이트를 추가할 때 사용되는 메모리는 예상보다 클 수 있습니다. 이는 GameMaker가 스프라이트를 텍스처 페이지로 저장하고 GPU 메모리에도 저장하기 때문입니다. 따라서 동일한 스프라이트의 이미지 파일에 비해 총 메모리가 더 클 수 있습니다.
문법
sprite_add_from_surface(index, surface, x, y, w, h, removeback, smooth);
인자 설명
| 인자 | 타입 | 설명 |
|---|---|---|
| index | Sprite Asset | 새로운 이미지를 추가할 스프라이트의 인덱스 |
| surface | Surface | 이미지를 가져올 표면의 인덱스 |
| x | Real | 복사할 x 위치 |
| y | Real | 복사할 y 위치 |
| w | Real | 복사할 영역의 너비 (x 위치에서부터) |
| h | Real | 복사할 영역의 높이 (y 위치에서부터) |
| removeback | Boolean | 배경 색상(왼쪽 아래 픽셀)과 같은 모든 픽셀을 투명하게 할지 여부 |
| smooth | Boolean | 가장자리를 부드럽게 할지 여부 |
반환값
N/A
활용 예제
아래 코드는 surf 변수에 인덱스된 표면에서 스프라이트를 생성하고, spr_custom 변수에 그 인덱스를 할당한 후, for 루프를 사용하여 표면을 가로질러 다양한 섹션을 캡처하여 스프라이트에 서브 이미지로 추가합니다.
spr_custom = sprite_create_from_surface(surf, 0, 0, 32, 32, true, true, 16, 16);
var i;
for (i = 1; i < 8; i += 1) {
sprite_add_from_surface(spr_custom, surf, i, 0, 32, 32, false, false);
}
추가 활용 예제
- 다양한 크기의 서브 이미지 추가하기
gml var spr = sprite_create_from_surface(surf, 0, 0, 64, 64, true, true); sprite_add_from_surface(spr, surf, 0, 0, 64, 64, true, true); sprite_add_from_surface(spr, surf, 64, 0, 64, 64, true, true); - 배경 색상을 제거하고 부드럽게 처리하기
gml var spr = sprite_create_from_surface(surf, 0, 0, 32, 32, true, true); sprite_add_from_surface(spr, surf, 0, 0, 32, 32, true, true); sprite_add_from_surface(spr, surf, 32, 0, 32, 32, true, true); - 서브 이미지의 위치 변경하기
gml var spr = sprite_create_from_surface(surf, 0, 0, 128, 128, true, true); sprite_add_from_surface(spr, surf, 0, 0, 64, 64, false, false); sprite_add_from_surface(spr, surf, 64, 64, 64, 64, false, false); - 서브 이미지 추가 후 애니메이션 만들기
gml var spr = sprite_create_from_surface(surf, 0, 0, 32, 32, true, true); for (var i = 0; i < 4; i++) { sprite_add_from_surface(spr, surf, i * 32, 0, 32, 32, false, false); }
이와 같은 방식으로 sprite_add_from_surface 함수를 활용하여 다양한 스프라이트를 생성하고 조작할 수 있습니다.