인프런 커뮤니티 질문&답변
physics.closest()는 중심점 기준인가요, 충돌 영역 기준인가요?
해결된 질문
작성
·
59
0
this.physics.closest()가 Mob과 플레이어의 거리를 계산할 때
단순히 중심 좌표 기준으로 계산되는 건지, 아니면 물리엔진에서 사용하는 충돌 영역 기준으로 계산되는 건지 헷갈립니다.
답변 1
0
ahracho
지식공유자
안녕하세요.this.physics.closest()는 단순히 중심 좌료 기준으로 계산됩니다.
Phaser에서 closest 함수가 실제로 어떻게 구현되어 있는지 링크에서 확인해보시면, 다음과 같이 source에 물리엔진 body가 있다면 body의 center(중심점)을 사용하고 있는 것을 확인하실 수 있습니다!
따라서 몹의 히트박스가 크기가 다양하다면 예상대로 동작하지 않을 확률이 크고, 그런 경우에는 edge to edge로 거리를 구하는 커스텀 로직을 작성하셔야 합니다.
closest: function (source, targets)
{
if (!targets)
{
targets = this.world.bodies.entries;
}
var min = Number.MAX_VALUE;
var closest = null;
var x = source.x;
var y = source.y;
var len = targets.length;
for (var i = 0; i < len; i++)
{
var target = targets[i];
var body = target.body || target;
if (source === target || source === body || source === body.gameObject || source === body.center)
{
continue;
}
var distance = DistanceSquared(x, y, body.center.x, body.center.y); // center 사용
if (distance < min)
{
closest = target;
min = distance;
}
}
return closest;
},




