객체 충돌 확인하기
이 문서는 GameMaker에서 객체 충돌을 확인하는 방법에 대해 설명하는 내용입니다. 아래는 이 기능의 설명과 활용 예제를 포함한 문서입니다.
개요
If Object At Place 액션은 주어진 객체와 현재 인스턴스가 방 안의 특정 위치에서 충돌하는지 확인하는 데 사용됩니다. 충돌이 감지되면 true로 평가되고, 그렇지 않으면 false로 평가됩니다.
- 필수 요소:
- 객체 - 충돌을 확인할 객체를 지정합니다.
- 위치 - 인스턴스를 배치할 위치를 설정합니다. 방의 절대 위치이거나 현재 인스턴스에 대한 상대 위치가 가능합니다.
- Not 플래그 - 충돌이 없는 경우
true로 평가하도록 설정할 수 있습니다. - 리스트 반환 옵션:
Return List체크 시, 충돌이 감지된 모든 인스턴스의 리스트가 생성되고,Target변수에 세팅됩니다.- 체크 해제 시, 충돌이 없으면
Target변수는 0보다 작은 값이 되고, 하나의 충돌 인스턴스의 고유 ID가 설정됩니다. - 프리 타겟 옵션:
Free Target을 true로 설정하면, 매 호출 시마다 새로운 리스트가 생성되고 기존 리스트는 파괴됩니다.
파라미터 설명
| 파라미터 | 설명 |
|---|---|
| Object | 충돌을 체크할 객체 또는 인스턴스. 여러 객체를 선택할 수 있습니다. |
| X | 충돌을 체크할 x 위치입니다. |
| Y | 충돌을 체크할 y 위치입니다. |
| Not | 조건을 반전하도록 설정하며, 충돌이 없을 때만 만족합니다. |
| Return List | Target에 충돌 리스트를 반환할지, 첫 번째 충돌만 반환할지 선택합니다. |
| Free Target | 변수가 필요시 해당 메모리를 해제하는 옵션을 true/false로 설정합니다. |
| Target | 액션의 반환 값을 저장할 변수입니다. |
활용 예제
예제 1: 충돌 감지 및 반사 동작
// 수평 이동 중 obj_Enemy와의 충돌 감지
if (if_object_at_place(obj_Enemy, x + hspeed, y, false, true, target)) {
hspeed = -hspeed; // 속도를 반전시킴
}
// 수직 이동 중 obj_Enemy와의 충돌 감지
if (if_object_at_place(obj_Enemy, x, y + vspeed, false, true, target)) {
vspeed = -vspeed; // 속도를 반전시킴
}
예제 2: 다수 객체 간 충돌 감지
// 다수 객체와의 충돌 체크 설정
if_object_at_place(obj_Enemy, x, y, false, true, target_list);
if (target_list >= 0) {
// 충돌한 객체가 닿은 경우 실행할 코드
// target_list를 기반으로 로직 추가 가능
}
// 메모리 해제 (옵션이 설정된 경우)
if (Free_Target) {
free_data_structure(target_list);
}
주의사항
- 충돌은 유효한 충돌 마스크를 가진 인스턴스에서만 인식됩니다. 즉,
sprite_index또는mask_index에 스프라이트가 할당되어 있어야 합니다. - "if" 블록에 액션을 추가하려면 액션 옆에 드롭해야 합니다.
이 문서는 GameMaker의 객체 충돌 체크 기능에 대한 기본적인 설명과 다양한 활용 예제를 제공합니다. 추가적인 질문이 있으시면 언제든지 물어보세요!