place_free 함수 설명 및 활용 예제
place_free
함수는 게임에서 호출하는 인스턴스가 'solid'로 표시된 다른 인스턴스와 충돌하는지 확인하는 데 사용됩니다. 이 함수가 제대로 작동하기 위해서는 코드를 실행하는 인스턴스가 유효한 충돌 마스크를 가져야 하며(스프라이트 자체의 마스크 또는 mask_index
를 통해), 충돌 체크는 유효한 마스크를 가진 'solid' 인스턴스와만 이루어집니다.
함수 작동 방식
이 함수는 인스턴스를 가져와서 x/y 인수로 지정된 위치에 배치했을 때 'solid'로 표시된 인스턴스와의 충돌을 테스트합니다. 충돌 체크는 선택된 충돌 마스크의 종류에 따라 정밀하게 또는 인스턴스의 경계 상자에 기반하여 수행됩니다.
문법
place_free(x, y);
인수 설명
인수 | 타입 | 설명 |
---|---|---|
x | Real | 확인할 x 위치 |
y | Real | 확인할 y 위치 |
반환 값
- Boolean: 충돌이 없으면 true, 충돌이 있으면 false를 반환합니다.
예제
다음 코드는 호출하는 인스턴스가 마우스와 같은 위치에 배치되었을 때, 'solid'로 표시된 인스턴스와의 충돌을 확인합니다. 충돌이 감지되지 않으면 인스턴스의 x/y 좌표를 마우스의 좌표로 설정합니다.
if (place_free(mouse_x, mouse_y)) {
x = mouse_x;
y = mouse_y;
}
활용 예제
- 플레이어 이동 제어 플레이어가 이동할 때, 충돌이 없는 경우에만 이동하도록 설정할 수 있습니다.
gml if (place_free(x + hspeed, y)) { x += hspeed; }
- NPC 경로 설정 NPC가 특정 위치로 이동할 때, 그 위치에 충돌이 없으면 이동하도록 할 수 있습니다.
gml if (place_free(target_x, target_y)) { x = target_x; y = target_y; }
- 아이템 드롭 아이템을 드롭할 때, 드롭할 위치에 충돌이 없으면 아이템을 생성합니다.
gml if (place_free(drop_x, drop_y)) { instance_create(drop_x, drop_y, obj_item); }
- 장애물 회피 적이 장애물을 피하도록 설정할 수 있습니다.
gml if (place_free(x + direction, y)) { x += direction; } else { direction = -direction; // 방향 전환 }
- 게임 오버 체크 플레이어가 특정 위치에 도달했을 때, 충돌이 없으면 게임 오버 상태로 전환합니다.
gml if (place_free(game_over_x, game_over_y)) { game_over = true; }
이와 같이 place_free
함수를 활용하여 다양한 게임 로직을 구현할 수 있습니다.