글
피격 대상을 관통하는 무기의 구현이나(관통 시 1프레임마다 피격 이벤트가 발생하지 않게), 2개 이상의 오브젝트가 약점으로 설정된 오브젝트의 구현에(N개 이상의 약점 부위 피격 시 데미지가 N배로 들어오지 않도록) 유용할 수 있다.
각각 피격될 오브젝트와, 공격 판정이 들어간 오브젝트의:
1. Create 이벤트에 아래 코드를 삽입한다.
hitdelaymap = ds_map_create();
2. Clean Up 이벤트에는 아래 코드를 삽입한다. (사용하지 않는 ds_map 삭제)
ds_map_destroy(hitdelaymap);
3. End Step 이벤트의 끝에 아래 코드를 삽입한다.
// map의 사이즈 검사
var mapsize = ds_map_size(hitdelaymap);
if (mapsize > 0)
{
// map의 각 키 검사
var mapkey = ds_map_find_last(hitdelaymap);
for (var i = mapsize; i > 0; i--)
{
// 다음에 탐색할 key 저장
var nextkey = ds_map_find_previous(hitdelaymap, mapkey);
// 해당 key의 딜레이값 감소
var temp = ds_map_find_value(hitdelaymap, mapkey);
// 딜레이값이 0 이하이거나 key에 해당하는 인스턴스가 없으면 key 삭제
if (((--temp) <= 0) || (!instance_exists(mapkey)))
{
ds_map_delete(hitdelaymap, mapkey);
}
else
{
// 감소된 딜레이값을 key 섹션에 저장
ds_map_replace(hitdelaymap, mapkey, temp);
}
// key 탐색
mapkey = nextkey;
}
}
4. 각각의 피격 스크립트를 다음과 같이 감싼다.
if (!ds_map_exists(hitdelaymap, _hitid))
{
(피격 스크립트 내용)
ds_map_add(hitdelaymap, _hitid, 딜레이);
}
여기서 _hitid는 맞은 오브젝트의 id., 딜레이는 피격 딜레이.
Create, Clean Up, End Step 이벤트의 내용은 부모 오브젝트에 쓰고, 자식 오브젝트에서 상속받기 위해서는
event_inherited()
위 코드를 각 자식 오브젝트 내 이벤트 최상단에 삽입해야 한다.
'기타 > 겜메 뻘팁' 카테고리의 다른 글
| Round half away from zero 반올림 알고리즘과 각도 정밀도 제한 알고리즘 (0) | 2025.12.16 |
|---|---|
| (GMS2)플레이어의 연사속도에 따른 가변 자동연사 딜레이 설정 (1) | 2025.12.12 |
| BGM 파일들을 한 파일에 몰아넣기 (2) | 2025.08.09 |
| 스프라이트의 중심 정확하게 맞추기 (백업본) (1) | 2023.06.03 |
| 가이팬게임 만들때 최적화 팁 (백업본) (0) | 2023.06.03 |
RECENT COMMENT