instance_position_list 함수 설명 및 활용 예제
instance_position_list 함수는 지정한 객체의 모든 인스턴스 또는 타일 맵과의 충돌을 검사할 수 있는 기능을 제공합니다. 이 함수를 사용할 때, 특정 점에서 충돌 검사가 이루어지며, 이는 인스턴스의 경계 박스 또는 정밀 충돌이 체크된 인스턴스의 마스크를 기준으로 수행됩니다.
주요 기능
- 충돌 검사: 지정한 위치에서 객체의 모든 인스턴스 또는 타일 맵과의 충돌 여부를 확인합니다.
- 결과 저장: 충돌이 발생한 인스턴스의 ID를 DS 리스트에 추가하여 관리합니다.
- 거리 정렬 옵션: 충돌한 인스턴스와 검사 위치 간의 거리를 기준으로 리스트를 정렬할 수 있습니다.
함수 문법
instance_position_list(x, y, obj, list, ordered);
인수 설명
| 인수 | 타입 | 설명 |
|---|---|---|
| x | Real | 검사할 x 좌표 |
| y | Real | 검사할 y 좌표 |
| obj | Object Asset 또는 Object Instance 또는 Tile Map Element ID 또는 Array | 객체, 인스턴스, 타일 맵 ID 또는 'all', 'other' 키워드 또는 이들을 포함하는 배열 |
| list | DS List | 충돌하는 인스턴스의 ID를 저장할 DS 리스트 |
| ordered | Boolean | 리스트를 거리 기준으로 정렬할지 여부 (true 또는 false) |
반환값
Real: 충돌이 발견된 인스턴스/타일 맵의 수, 발견되지 않을 경우 0을 반환합니다.
예제 코드
var _list = ds_list_create(); // DS 리스트 생성
var _num = instance_position_list(mouse_x, mouse_y, all, _list, false); // 충돌 검사
if (_num > 0) {
for (var i = 0; i < _num; ++i) {
instance_destroy(_list[i]); // 충돌한 인스턴스 제거
}
}
ds_list_destroy(_list); // 리스트 메모리 해제
위 코드는 마우스 위치에서 모든 인스턴스와의 충돌을 검사하고, 충돌한 인스턴스를 DS 리스트에 추가한 후, 리스트를 순회하며 각 인스턴스를 제거합니다.
추가 활용 및 응용 예제
- 특정 객체와의 충돌 확인하기
var _list = ds_list_create();
var _num = instance_position_list(mouse_x, mouse_y, obj_enemy, _list, false);
if (_num > 0) {
// 적 인스턴스와 충돌 시 처리
}
ds_list_destroy(_list);
- 정렬된 리스트로 거리 기반 처리
var _list = ds_list_create();
var _num = instance_position_list(mouse_x, mouse_y, all, _list, true); // 거리에 따라 정렬
if (_num > 0) {
// 가장 가까운 인스턴스부터 처리
}
ds_list_destroy(_list);
- 타일 맵 충돌 체크
var _list = ds_list_create();
var _num = instance_position_list(mouse_x, mouse_y, obj_tile, _list, false);
if (_num > 0) {
// 타일 맵과의 충돌 처리
}
ds_list_destroy(_list);
이와 같이 instance_position_list 함수를 활용하여 다양한 충돌 처리를 구현할 수 있습니다.