이동 및 충돌 처리
이 문서에서는 이동 및 충돌 처리에 대한 내용을 쉽게 설명하고, 다양한 활용 및 응용 예제를 제공합니다. 이 기능은 인스턴스를 지정된 거리만큼 이동시키고 주어진 객체와의 충돌을 피하는 작업입니다.
기능 설명
이 기능은 인스턴스가 이동할 수 있도록 지원하며, 경사나 작은 계단을 탐색할 때 유용합니다. 이동 중에 충돌을 확인하여 자연스러운 이동을 보장합니다.
Action Syntax (액션 구문)
move_and_collide(object, x_dist, y_dist, iterations, x_offset, y_offset, max_x_movement, max_y_movement)
인수 설명
| 인수 | 설명 |
|---|---|
| Object | 충돌을 피할 객체 또는 인스턴스 ID (예: 벽 객체). 여러 객체를 추가할 수 있습니다. |
| X Dist | X축(수평)으로 이동할 픽셀 수 |
| Y Dist | Y축(수직)으로 이동할 픽셀 수 |
| Iterations | 목표 위치에 도달하기 위한 단계 수 (기본값은 4) |
| X Offset | 충돌 시 이동할 방향의 X 구성 요소; 0을 지정하면 기본 동작(수직 방향)을 사용합니다. |
| Y Offset | 충돌 시 이동할 방향의 Y 구성 요소; 0을 지정하면 기본 동작(수직 방향)을 사용합니다. |
| Max X Movement | X축에서 인스턴스가 이동해야 하는 최대 속도; -1을 지정하면 제한 없음 |
| Max Y Movement | Y축에서 인스턴스가 이동해야 하는 최대 속도; -1을 지정하면 제한 없음 |
예제를 통한 이해
아래의 예제는 왼쪽 화살표 키가 눌렸는지 확인하고, 눌렸다면 객체를 왼쪽으로 2픽셀 이동시키며 obj_wall과의 충돌을 체크하는 코드입니다.
if (keyboard_check(vk_left)) {
move_and_collide(obj_wall, -2, 0, 4);
}
다양한 활용 및 응용 예제
1. 여러 방향으로의 이동
화살표 키를 이용해 인스턴스가 여러 방향으로 이동할 수 있도록 할 수 있습니다.
if (keyboard_check(vk_left)) {
move_and_collide(obj_wall, -2, 0, 4);
}
if (keyboard_check(vk_right)) {
move_and_collide(obj_wall, 2, 0, 4);
}
if (keyboard_check(vk_up)) {
move_and_collide(obj_wall, 0, -2, 4);
}
if (keyboard_check(vk_down)) {
move_and_collide(obj_wall, 0, 2, 4);
}
2. 제한된 이동 속도 설정
인스턴스의 최대 이동 속도를 설정하여 지나치게 빠른 이동을 방지할 수 있습니다.
var speed = 4;
if (keyboard_check(vk_left)) {
move_and_collide(obj_wall, -speed, 0, 4, 0, 0, 0, -1);
}
3. 점프 기능 추가
충돌 감지를 이용해 점프 기능을 구현할 수 있습니다.
if (keyboard_check_pressed(vk_space) && place_meeting(x, y + 1, obj_wall)) {
move_and_collide(obj_wall, 0, -10, 4);
}
결론
이 이동 및 충돌 처리 기능은 게임 내에서 인스턴스의 자연스러운 움직임을 구현하는 데 매우 유용하며, 다양한 방식으로 확장이 가능합니다. 위의 예제를 통해 필요한 기능을 쉽게 수정하고 조정하여 사용할 수 있습니다.