MP Grid Cell 추가하기
이 문서에서는 mp_grid_add_cell
함수에 대해 설명합니다. 이 함수를 사용하면 주어진 MP 그리드 내에서 개별 셀을 "금지"로 표시할 수 있습니다. 즉, 경로 찾기 함수가 이 셀을 통과하지 않도록 설정할 수 있습니다.
MP 그리드와 방 좌표
일반적으로 우리는 방 좌표(x/y)로 작업하며, MP 그리드 셀 좌표로 작업하지 않습니다. 아래 이미지는 두 좌표 간의 상관관계를 보여줍니다:
- MP 그리드는 0,0에서 시작하여 셀 번호가 매겨집니다.
- 방 좌표도 0,0에서 시작합니다.
- 예를 들어, 위치 (260, 130)의 인스턴스는 그리드 셀 (8, 4)에 해당합니다.
위치가 어떤 셀에 해당하는지 계산하는 방법은 두 가지가 있습니다:
- 숫자를 그리드 해상도로 나눈 후 내림(floor) 처리하기
- 2의 거듭제곱 해상도를 사용하는 경우 비트 연산자 사용하기
비트 연산이 더 빠르다는 점을 유의하세요.
함수 문법
mp_grid_add_cell(id, h, v);
인수 설명
인수 | 타입 | 설명 |
---|---|---|
id | MP Grid ID | 사용될 mp_grid의 인덱스 |
h | Real | 그리드 내 셀의 수평 위치 |
v | Real | 그리드 내 셀의 수직 위치 |
반환값
- N/A
활용 예제
다음은 mp_grid_add_cell
함수를 사용하는 예제입니다.
with (obj_Wall) {
mp_grid_add_cell(grid, floor(x / 32), floor(y / 32));
}
with (obj_Door) {
mp_grid_add_cell(grid, x >> 5, y >> 5);
}
위의 코드는 모든 obj_Wall
과 obj_Door
가 각각의 셀 위치를 grid
변수에 인덱싱된 mp_grid에 추가하도록 합니다. 첫 번째 예제에서는 객체의 x/y 좌표를 그리드 해상도로 나누고 내림(floor) 처리하여 정수로 유지합니다. 두 번째 예제에서는 그리드 해상도가 2의 거듭제곱이기 때문에 x,y 좌표를 오른쪽으로 5비트 시프트하여 처리합니다.
추가 활용 및 응용 예제
- 다양한 객체 추가하기
gml with (obj_Tree) { mp_grid_add_cell(grid, floor(x / 32), floor(y / 32)); }
- 조건부로 셀 추가하기
gml if (instance_exists(obj_Enemy)) { with (obj_Enemy) { mp_grid_add_cell(grid, floor(x / 32), floor(y / 32)); } }
- 다양한 해상도 처리하기
gml var grid_resolution = 16; // 해상도 설정 with (obj_Player) { mp_grid_add_cell(grid, floor(x / grid_resolution), floor(y / grid_resolution)); }
이와 같이 mp_grid_add_cell
함수를 활용하여 다양한 객체를 그리드에 추가하고, 조건부로 셀을 추가하는 방법을 보여주었습니다.