collision_line_list 함수 설명
collision_line_list
함수는 collision_line()
함수와 유사하지만, 한 번에 하나의 인스턴스나 타일 맵만 감지하는 대신 여러 인스턴스나 타일 맵을 감지합니다. 이 함수는 선의 시작과 끝의 x/y 위치를 제공하고, 충돌을 확인할 객체나 타일 맵을 지정합니다. 또한, 충돌 검사를 정밀하게 할지 여부와 호출 인스턴스를 포함할지 여부를 설정할 수 있습니다.
이 함수는 DS 리스트를 사용하여 호출 인스턴스와 충돌하는 인스턴스(또는 타일 맵)의 ID 값을 리스트의 끝에 추가합니다. 이 함수를 호출하기 전에 리스트를 비워서 결과가 이 호출에서만 나오도록 할 수 있습니다. 또한, 인스턴스를 선의 중심에서 원점까지의 거리 기준으로 정렬할 수 있는 옵션도 있습니다. 함수는 발견된 인스턴스나 타일 맵의 수를 반환하며, 발견되지 않으면 0을 반환합니다.
구문
collision_line_list(x1, y1, x2, y2, obj, prec, notme, list, ordered);
인수 설명
인수 | 유형 | 설명 |
---|---|---|
x1 | Real | 선의 시작 x 좌표 |
y1 | Real | 선의 시작 y 좌표 |
x2 | Real | 선의 끝 x 좌표 |
y2 | Real | 선의 끝 y 좌표 |
obj | Object | 객체, 인스턴스, 타일 맵 ID, 키워드 all/other 또는 이들 항목을 포함하는 배열 |
prec | Boolean | 정밀 충돌 검사 여부 (true: 느림, false: 빠름) |
notme | Boolean | 호출 인스턴스를 제외할지 여부 (true: 제외, false: 포함) |
list | DS List | 충돌하는 인스턴스의 ID를 저장할 DS 리스트 |
ordered | Boolean | 리스트를 거리 기준으로 정렬할지 여부 (true: 정렬, false: 비정렬) |
반환값
- Real: 충돌이 발견된 인스턴스나 타일 맵의 수
활용 예제
예제 1: 적과의 충돌 감지 및 제거
var _list = ds_list_create();
var _num = collision_line_list(x - 100, y, x + 100, y, obj_Enemy, false, true, _list, false);
if (_num > 0){
for (var i = 0; i < _num; ++i){
||
||
}
}
ds_list_destroy(_list);
이 코드는 호출 인스턴스 위치에서 100픽셀 떨어진 선을 따라 "obj_Enemy" 인스턴스와의 충돌을 검사합니다. 충돌이 발생하면 미리 생성된 리스트를 통해 충돌한 각 인스턴스를 제거합니다.
예제 2: 충돌 인스턴스의 ID 출력
var _list = ds_list_create();
var _num = collision_line_list(x1, y1, x2, y2, obj_SomeObject, true, false, _list, true);
if (_num > 0){
for (var i = 0; i < _num; ++i){
||
||
}
}
ds_list_destroy(_list);
이 코드는 정밀 충돌 검사를 수행하고 충돌한 인스턴스의 ID를 출력합니다. 리스트는 거리 기준으로 정렬됩니다.
예제 3: 충돌 감지 후 효과 적용
var _list = ds_list_create();
var _num = collision_line_list(x, y, x + 50, y, obj_Obstacle, false, false, _list, false);
if (_num > 0){
for (var i = 0; i < _num; ++i){
// 충돌한 인스턴스에 효과 적용
||
||
}
}
ds_list_destroy(_list);
이 코드는 장애물과의 충돌을 감지하고, 충돌한 각 인스턴스에 특정 효과를 적용합니다.