mp_potential_step 함수 설명
mp_potential_step
함수는 인스턴스가 특정 목표 위치(xgoal, ygoal)로 이동하는 동안 장애물을 피하도록 도와주는 기능입니다. 이 함수는 인스턴스가 고체 인스턴스(또는 checkall이 true일 때 모든 인스턴스)에 부딪힐 경우, 그 인스턴스를 피하기 위해 방향을 변경하고 주위를 돌아가도록 합니다. 이 방법이 항상 성공하는 것은 아니지만, 대부분의 간단한 경우에는 목표를 향해 효과적으로 이동할 수 있습니다. 함수는 목표에 도달했는지 여부를 반환합니다.
문법
mp_potential_step(xgoal, ygoal, stepsize, checkall)
인수 설명
인수 | 타입 | 설명 |
---|---|---|
xgoal | 숫자 | 목표 x 위치 |
ygoal | 숫자 | 목표 y 위치 |
stepsize | 숫자 | 인스턴스가 한 단계에서 이동하는 속도(픽셀 단위) |
checkall | 불리언 | 모든 인스턴스를 확인할지(true) 또는 고체 인스턴스만 확인할지(false) |
반환값
- 목표에 도달했는지 여부 (true 또는 false)
예제 코드
if (instance_exists(obj_Enemy)) {
var inst;
inst = instance_nearest(x, y, obj_Enemy);
mp_potential_step(inst.x, inst.y, 5, false);
}
위의 코드는 먼저 방 안에 "obj_Enemy" 인스턴스가 있는지 확인합니다. 만약 있다면, 가장 가까운 인스턴스를 찾아 그 ID를 변수에 저장합니다. 이 변수는 mp_potential_step
함수를 호출하여 인스턴스가 발견된 객체의 x/y 위치로 5픽셀의 속도로 이동하도록 합니다. 이때 고체로 표시된 인스턴스만 피합니다.
활용 예제
1. 적을 피하는 NPC
if (instance_exists(obj_Enemy)) {
var enemy = instance_nearest(x, y, obj_Enemy);
mp_potential_step(enemy.x, enemy.y, 4, true);
}
이 코드는 NPC가 가장 가까운 적을 피하도록 합니다.
2. 목표 지점으로 이동
mp_potential_step(100, 200, 3, false);
이 코드는 인스턴스가 (100, 200) 위치로 이동하도록 합니다.
3. 장애물 회피
if (instance_exists(obj_Wall)) {
var wall = instance_nearest(x, y, obj_Wall);
mp_potential_step(wall.x, wall.y, 2, true);
}
이 코드는 인스턴스가 가장 가까운 벽을 피하도록 합니다.
4. 플레이어를 추적하는 적
if (instance_exists(obj_Player)) {
var player = instance_nearest(x, y, obj_Player);
mp_potential_step(player.x, player.y, 5, false);
}
이 코드는 적이 플레이어를 추적하도록 합니다.
5. 랜덤 이동
var randomX = random(room_width);
var randomY = random(room_height);
mp_potential_step(randomX, randomY, 3, false);
이 코드는 인스턴스가 방 안의 랜덤한 위치로 이동하도록 합니다.