충돌 체크 행동 설명서
이 문서는 주어진 형상 내에서 특정 객체 인스턴스와의 충돌 여부를 확인하는 방법을 설명합니다. 형상을 지정하고, 체크할 객체를 정의하며, 형상의 좌상단 및 우하단 좌표를 제공하거나 선의 경우 시작 및 끝 위치를 입력합니다. 다음 내용에서 이 과정을 쉽게 설명하겠습니다.
기본 개념
충돌 형상
- 충돌 체크를 위해 사용할 수 있는 형상:
- 사각형 (Rectangle)
- 타원 (Ellipse)
- 선 (Line)
좌표
- 좌표는 게임 룸 내의 절대 위치 또는 현재 행동을 수행하는 인스턴스에 상대적인 위치로 지정할 수 있습니다.
충돌 마스크
- 충돌 검사를 위해서는 검사할 객체 인스턴스에 스프라이트가 할당되어 있어야 합니다. (예:
sprite_index또는mask_index에 스프라이트 할당)
결과
- 충돌이 감지되면
true를 반환하고, 아니면false를 반환합니다. Not플래그를 사용하여 충돌이 없는 경우만true로 평가할 수도 있습니다.
자기 제외
Exclude Self옵션을 사용하면 현재 인스턴스를 충돌 체크에서 제외할 수 있습니다.
리스트 반환
Return List옵션을 체크하면 충돌하는 모든 인스턴스의 리스트를 반환합니다.- 리스트가 아닌 단일 충돌 정보가 필요할 경우 체크를 해제할 수 있습니다.
충돌 체크 함수 사용 예제
예제 코드
아래 코드는 "obj_Enemy"라는 객체 유형과 충돌을 체크하는 방법을 보여줍니다. 호출하는 인스턴스의 100px 범위 내에서 충돌을 체크하고, 충돌하는 모든 인스턴스를 리스트에 저장합니다. 그 후, 리스트의 각 인스턴스의 "hp" 변수를 1 감소시킵니다.
// 충돌 체크 행동 블록
var targetList; // 타겟 리스트 변수 설정
if (collision_circle(x, y, 100, obj_Enemy, true, true)) {
targetList = ds_list_create(); // 새 리스트 생성
// 충돌 체크
var collisionCount = instance_position(x, y, obj_Enemy); // 충돌 발생 개수 확인
// 리스트에 충돌 인스턴스 저장
with (obj_Enemy) {
hp -= 1; // hp 감소
ds_list_add(targetList, id); // 리스트에 인스턴스 ID 추가
}
// 리스트 해제
ds_list_destroy(targetList);
}
인수 설명
| 인수 | 설명 |
|---|---|
| Shape | 사용할 형상 |
| Object | 충돌을 체크할 객체 또는 인스턴스 |
| x1 | 시작 x 위치 |
| y1 | 시작 y 위치 |
| x2 | 종료 x 위치 |
| y2 | 종료 y 위치 |
| Exclude Self | 현재 인스턴스를 무시할지 여부 |
| Not | 조건 반전, 충돌이 없을 때만 만족하는 조건 |
| Return List | 리스트를 반환할지 아니면 첫 번째 충돌만 반환할지 여부 |
| Free Target | 변수 / 표현식으로 리스트 메모리 해제를 제어하는 옵션입니다 |
| Target | 반환 값을 저장할 대상 변수 |
주의사항
- 유효한 충돌 마스크가 없는 인스턴스는 충돌이 감지되지 않습니다.
- 작동 중 만약 인스턴스가 파괴되거나 룸이 종료되면 리스트 ID를 해제해야 합니다.
충돌 체크는 게임에서 객체 간의 상호작용을 처리하는 중요한 요소입니다. 이 행동을 적절히 활용하여 게임의 재미를 높여보세요!