draw_sprite_general 함수 설명
draw_sprite_general
함수는 draw_sprite_ext()
와 draw_sprite_part()
함수를 결합하여 각 모서리에 개별 색상을 혼합할 수 있는 추가적인 블렌딩 옵션을 제공합니다. 이 함수는 스프라이트의 특정 부분을 그릴 때 유용합니다.
주의사항
모서리에 색상을 적용할 때 예상과 다르게 보일 수 있습니다. 이는 스프라이트가 두 개의 삼각형으로 구성되어 있기 때문입니다. 각 삼각형의 정점에 색상이 적용되어 색상이 정점 사이에서 개별적으로 보간됩니다.
색상 혼합은 HTML5 타겟에서 WebGL이 활성화된 경우에만 권장됩니다. WebGL이 비활성화된 경우에도 색상을 설정할 수 있지만, 이 경우 스프라이트가 복제되어 캐시에 저장됩니다. 여러 색상 변경을 사용할 경우 게임 성능이 저하될 수 있습니다.
스켈레톤 애니메이션 스프라이트를 사용할 때 이 함수가 예상대로 작동하지 않을 수 있으며, 이 경우 draw_skeleton_*
함수를 사용해야 합니다.
함수 구문
draw_sprite_general(sprite, subimg, left, top, width, height, x, y, xscale, yscale, rot, c1, c2, c3, c4, alpha);
매개변수 설명
매개변수 | 유형 | 설명 |
---|---|---|
sprite | Sprite Asset | 그릴 스프라이트 |
subimg | Real | 그릴 스프라이트의 서브 이미지 (프레임) |
left | Real | 그릴 영역의 왼쪽 상단 x 위치 |
top | Real | 그릴 영역의 왼쪽 상단 y 위치 |
width | Real | 그릴 영역의 너비 |
height | Real | 그릴 영역의 높이 |
x | Real | 스프라이트를 그릴 x 좌표 |
y | Real | 스프라이트를 그릴 y 좌표 |
xscale | Real | 스프라이트의 수평 스케일링 |
yscale | Real | 스프라이트의 수직 스케일링 |
rot | Real | 스프라이트의 회전 |
c1 | Colour | 스프라이트의 왼쪽 상단 영역에 혼합할 색상 |
c2 | Colour | 스프라이트의 오른쪽 상단 영역에 혼합할 색상 |
c3 | Colour | 스프라이트의 오른쪽 하단 영역에 혼합할 색상 |
c4 | Colour | 스프라이트의 왼쪽 하단 영역에 혼합할 색상 |
alpha | Real | 스프라이트의 알파 값 (0은 투명, 1은 불투명) |
예제
draw_sprite_general(sprite_index, image_index, 8, 8, sprite_width-16, sprite_height-16, x, y, 2, 0.5, 180, c_white, c_white, c_black, c_black, 1);
위 코드는 인스턴스에 할당된 스프라이트(sprite_index
)와 현재 애니메이션 프레임(image_index
)을 그립니다. 스프라이트의 모든 면에서 8px의 여백을 제거하고, 너비는 두 배로, 높이는 반으로 늘립니다. 스프라이트는 불투명하고, 거꾸로 그려집니다. 스프라이트의 상단 영역은 흰색으로 혼합되어 정상적으로 보이고, 하단 영역은 검은색으로 혼합되어 부드러운 그라데이션으로 정상에서 실루엣으로 변합니다.
활용 예제
- 스프라이트 애니메이션: 다양한 프레임을 사용하여 애니메이션 효과를 줄 수 있습니다.
gml draw_sprite_general(my_sprite, current_frame, 0, 0, 64, 64, x, y, 1, 1, 0, c_red, c_blue, c_green, c_yellow, 1);
- UI 요소: 사용자 인터페이스의 버튼이나 배경을 그릴 때 색상 혼합을 활용할 수 있습니다.
gml draw_sprite_general(button_sprite, 0, 0, 0, 100, 50, mouse_x, mouse_y, 1, 1, 0, c_white, c_black, c_gray, c_blue, 0.8);
- 게임 배경: 배경을 그릴 때 여러 색상을 혼합하여 깊이감을 줄 수 있습니다.
gml draw_sprite_general(background_sprite, 0, 0, 0, room_width, room_height, 0, 0, 1, 1, 0, c_skyblue, c_lightblue, c_white, c_gray, 1);
- 효과 추가: 스프라이트에 다양한 효과를 추가하여 시각적으로 매력적인 요소를 만들 수 있습니다.
gml draw_sprite_general(effect_sprite, 0, 0, 0, 128, 128, x, y, 1.5, 1.5, 45, c_purple, c_orange, c_red, c_yellow, 0.5);