Cộng đồng Hỏi & Đáp của Inflearn
physics.closest()는 중심점 기준인가요, 충돌 영역 기준인가요?
Đã giải quyết
Viết
·
67
0
this.physics.closest()가 Mob과 플레이어의 거리를 계산할 때
단순히 중심 좌표 기준으로 계산되는 건지, 아니면 물리엔진에서 사용하는 충돌 영역 기준으로 계산되는 건지 헷갈립니다.
javascriptphaser
Câu trả lời 1
0
ahracho
Người chia sẻ kiến thức
안녕하세요.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;
},




