스켈레톤 본 상태 설정
스켈레톤 애니메이션은 여러 개의 "본"으로 구성되어 있으며, 이 본들은 애니메이션 프로그램에서 정의되고 이름이 지정됩니다. skeleton_bone_state_set 함수는 특정 본에 대한 데이터를 언제든지 설정하는 데 사용됩니다. 이 데이터는 사용 중인 애니메이션 세트에 따라 스켈레톤의 현재 포즈를 설정합니다. 이 함수는 다음과 같은 키와 필수 값을 포함하는 DS 맵을 필요로 합니다:
| 키 | 설명 |
|---|---|
| "x" | 부모 본에 대한 본의 로컬 x 위치 |
| "y" | 부모 본에 대한 본의 로컬 y 위치 |
| "angle" | 부모 본에 대한 본의 로컬 회전 |
| "xscale" | 본의 로컬 수평 스케일 |
| "yscale" | 본의 로컬 수직 스케일 |
| "parent" | 부모 본의 이름 (문자열) |
이 함수는 애니메이션 데이터를 "가로채고" 수정하여 화면에 그리기 전에 사용할 수 있도록 제공됩니다. 따라서 이 함수를 Other - Animation Update 이벤트에서 사용하는 것이 좋습니다. 이 이벤트는 그리기 이벤트 직전에 트리거됩니다.
ds_map을 사용하여 skeleton_bone_state_get() 함수로 채운 동일한 맵을 사용할 수 있으며, 이 맵은 추가적인 "World" 키와 값을 포함하고 있습니다. 이러한 값은 읽기 전용이므로, 이 함수로 설정해도 영향을 미치지 않습니다.
문법
skeleton_bone_state_set(bone, map);
인수 설명
| 인수 | 유형 | 설명 |
|---|---|---|
| bone | String | 본의 이름 (문자열) |
| map | DS Map ID | 본 데이터를 저장하는 (이전에 생성된) DS 맵 |
반환값
N/A
활용 예제
예제 1: 본의 각도 설정
var map = ds_map_create();
skeleton_bone_state_get("head", map);
var xx = ds_map_find_value(map, "worldX");
var yy = ds_map_find_value(map, "worldY");
var deltax = mouse_x - (x + xx);
var deltay = mouse_y - (y + yy);
var angle = -radtodeg(arctan2(deltay, deltax));
ds_map_replace(map, "angle", angle);
skeleton_bone_state_set("head", map);
ds_map_destroy(map);
위 코드는 DS 맵을 생성하고 "head"라는 본의 데이터를 채운 후, 본의 월드 위치를 추출하여 마우스 위치를 추적하는 본의 "angle"을 설정합니다.
예제 2: 본의 위치 및 스케일 조정
var map = ds_map_create();
skeleton_bone_state_get("arm", map);
ds_map_replace(map, "x", 50);
ds_map_replace(map, "y", 100);
ds_map_replace(map, "xscale", 1.5);
ds_map_replace(map, "yscale", 1.5);
skeleton_bone_state_set("arm", map);
ds_map_destroy(map);
이 코드는 "arm" 본의 위치와 스케일을 조정합니다.
예제 3: 부모 본의 위치에 따라 자식 본 위치 조정
var map = ds_map_create();
skeleton_bone_state_get("childBone", map);
var parentX = ds_map_find_value(map, "parentX");
var parentY = ds_map_find_value(map, "parentY");
ds_map_replace(map, "x", parentX + 20);
ds_map_replace(map, "y", parentY + 20);
skeleton_bone_state_set("childBone", map);
ds_map_destroy(map);
이 코드는 부모 본의 위치에 따라 자식 본의 위치를 조정합니다.