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

[게임메이커 강좌-기초][GMS2] 추가한 스프라이트 이미지에 충돌 마스크 설정

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

 

 

GAME MAKER 강좌

 

KAYAN

 

 

 

 

 

 

◈ 추가한 스프라이트 이미지에 충돌 마스크 설정

 

 

이 기능을 사용하면 스프라이트가 가져야 하는 충돌 마스크의 속성을 설정할 수 있습니다.


   ◎ sprite_collision_mask(ind, sepmasks, bboxmode, bbleft, bbtop, bbright, bbbottom, kind, tolerance);


      - ind : 스프라이트 인덱스
      - sepmasks : 스프라이트의 각 하위 이미지에 대해 충돌 마스크를 생성할지(true),
                          아니면 모두에 대해 하나의 마스크를 생성할지(false) 여부.


      - bboxmode : 사용할 충돌 경계 상자의 종류. 0 = 자동, 1 = 전체 이미지, 2 = 사용자 정의.
      - bbleft : 충돌 경계 상자의 왼쪽 위치
      - bbtop : 충돌 경계 상자의 상단 위치
      - bright : 충돌 경계 상자의 오른쪽 위치
      - bbbottom : 충돌 경계 상자의 하단 위치
      - kind : 충돌 경계 상자 종류(모양)
      - tolerance (허용 오차) : 투명도 값의 허용 오차(0=오차 없음.기본값, 255=전체 허용 오차)

 

[bboxmode] 모드로 자동(0), 또는 전체 이미지(1)를 선택하면, 개별 충돌 경계 상자 값(bbleft, bbtop, bbright, bbbottom)을 0으로 설정할 수 있습니다.

사용자 정의 마스크(2)를 지정하는 경우 충돌 경계 상자의 값을 설정해야 합니다.

충돌 경계 상자 값은 항상 스프라이트의 왼쪽 위 모서리 위치(0, 0)을 기준으로 합니다.

 

[kind]에 마스크 종류를 설정하면 마스크 자체의 일반적인 모양이 설정되지만, 직사각형 마스크가 아닌

다른 마스크들은 충돌을 해결할 때 더 많은 처리 능력이 필요하므로 성능이 저하될 수 있습니다.

일반적으로 꼭 필요한 경우에만 직사각형 이외의 마스크 유형을 사용하는 것이 좋습니다.

 

(▲ 충돌 마스크 속성)

 

참고로 이 기능은 회전 직사각형 충돌 마스크(Rectangle With Rotation)는 지원되지 않습니다.

 

[kind]에 설정할 수 있는 마스크 종류는 다음 상수 중 하나입니다.

 

   - bboxkind_Rectangular : 직사각형(회전하지 않는) 직사각형 충돌 마스크 모양

   - bboxkind_ellipse : 타원형 충돌 마스크 모양

   - bboxkind_diamond : 다이아몬드 충돌 마스크 모양

   - bboxkind_precise : 지정된 허용 오차 값을 기반으로 스프라이트의 불투명 픽셀을 마스크로하는 충돌 마스크

 

(▲ 충돌 마스크 모양)

 

마지막으로 [tolerance](허용오차)는 마스크의 정밀도를 정의하는데 사용됩니다

다만, [bboxmode]에 "전체 이미지(1)" 마스크를 지정하면 이 설정은 무시됩니다.

허용오차가 0(기본값)이면, 마스크의 투명도가 0보다 큰 모든 단일 픽셀이 마스크로 처리된다는 의미입니다.

따라서 값을 0보다 크게 설정(0~255)하면 픽셀의 투명도 값에 따라 충돌 마스크 경계로 처리됩니다.

0~255 값을 지정할 수 있으며 0은 투명도 오차없이 마스크를 설정하고,

255는 불투명 픽셀도 허용 오차 범위에 포함되므로 마스크 설정을 하지 않는 것과 같습니다.

 

 

예)


   spr_custom = sprite_add("player_5.png", 16, true, true, 0, 0);

   sprite_collision_mask(spr_custom, true, 1, 0, 0, 0, 0, 0, 0);


 

※ [참고] 이 기능은 비트맵 스프라이트에만 유용하며 SWF 또는 JSON(Spine) 스프라이트에서는 작동하지 않습니다.

 

※ [참고] 이 기능은 추가된 스프라이트나 복제된 스프라이트에서만 작동하며 미리 만들어진 리소스에서는 직접 작동하지 않습니다.

 

 

 

 

 

 

 

 

 

 

300x250

댓글