collision_circle_list 함수 설명
collision_circle_list
함수는 collision_circle()
함수와 유사하지만, 한 번에 여러 인스턴스나 타일 맵의 충돌을 감지합니다. 이 함수는 원형 영역의 중심 좌표와 반지름, 그리고 충돌을 확인할 객체나 타일 맵을 입력받습니다. 또한, 충돌 감지가 정밀하게 이루어져야 하는지 여부와 호출 인스턴스를 포함할지 여부를 설정할 수 있습니다.
이 함수는 충돌하는 인스턴스나 타일 맵의 ID 값을 저장할 DS 리스트를 제공합니다. 호출하기 전에 리스트를 비워서 이번 호출의 결과만 포함할 수 있습니다. 또한, 원형 영역의 중심으로부터 각 인스턴스까지의 거리에 따라 정렬할 수도 있습니다. 함수는 발견된 인스턴스나 타일 맵의 수를 반환하며, 발견되지 않으면 0을 반환합니다.
문법
collision_circle_list(x1, y1, rad, obj, prec, notme, list, ordered);
인자 설명
인자 | 타입 | 설명 |
---|---|---|
x1 | Real | 확인할 원의 중심 x 좌표 |
y1 | Real | 확인할 원의 중심 y 좌표 |
rad | Real | 원의 반지름 (중심에서 가장자리까지의 거리, 픽셀 단위) |
obj | Object Asset | 객체, 인스턴스, 타일 맵 ID, 키워드(all/other), 또는 이들 항목을 포함하는 배열 |
prec | Boolean | 정밀 충돌 감지 여부 (true: 느림, false: 빠름) |
notme | Boolean | 호출 인스턴스를 제외할지 여부 (true: 제외, false: 포함) |
list | DS List | 충돌하는 인스턴스의 ID를 저장할 DS 리스트 |
ordered | Boolean | 리스트를 거리 기준으로 정렬할지 여부 (true: 정렬, false: 비정렬) |
반환값
- Real: 충돌이 발견된 인스턴스나 타일 맵의 수
활용 예제
var _list = ds_list_create();
var _num = collision_circle_list(x, y, 100, obj_Enemy, false, true, _list, false);
if (_num > 0) {
for (var i = 0; i < _num; ++i) {
||
||
}
}
ds_list_destroy(_list);
위 코드는 호출 인스턴스의 위치를 중심으로 100픽셀 반경의 원형 영역에서 "obj_Enemy" 인스턴스와의 충돌을 확인합니다. 충돌이 발생하면 미리 생성된 리스트를 통해 충돌한 각 인스턴스를 파괴합니다.
추가 활용 예제
- 충돌 감지 후 점수 증가
gml var _list = ds_list_create(); var _num = collision_circle_list(x, y, 50, obj_Coin, false, true, _list, true); score += _num; // 충돌한 동전 수만큼 점수 증가 ds_list_destroy(_list);
- 적 인스턴스와의 충돌 시 공격
gml var _list = ds_list_create(); var _num = collision_circle_list(x, y, 75, obj_Enemy, true, false, _list, false); if (_num > 0) { for (var i = 0; i < _num; ++i) { || || } } ds_list_destroy(_list);
- 특정 조건에 따라 충돌 처리
gml var _list = ds_list_create(); var _num = collision_circle_list(x, y, 120, obj_Enemy, false, false, _list, true); if (_num > 0 && player_powerup) { for (var i = 0; i < _num; ++i) { || || } } ds_list_destroy(_list);